Django-Haystack 和 Solr 8.5.1

Cha*_*les 4 django solr pysolr django-haystack

Django haystack 是否适用于最新的 Solr 更新(8.5.1)?另外我如何设置我的 Django 博客项目

Ruf*_*fat 7

CentOS 8、Solr 8.7、Django Oscar 3.0

1)安装Java

yum update
yum install java-1.8.0-openjdk lsof
Run Code Online (Sandbox Code Playgroud)

2)安装Solr

cd /tmp
wget https://downloads.apache.org/lucene/solr/8.7.0/solr-8.7.0.tgz
tar xzf solr-8.7.0.tgz solr-8.7.0/bin/install_solr_service.sh --strip-components=2
./install_solr_service.sh solr-8.7.0.tgz

systemctl enable solr
systemctl start solr
Run Code Online (Sandbox Code Playgroud)

3)限制

调整 solr 用户的 Linux 限制。你可以在这里做/etc/security/limits.conf。在文件末尾添加行:

solr        soft    nofile      65535
solr        hard    nofile      65535
Run Code Online (Sandbox Code Playgroud)

或者在这里 /etc/systemd/system.conf 设置变量:

DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
Run Code Online (Sandbox Code Playgroud)

4)防火墙

在 iptables 或 firewalld 中关闭端口 8983

5)重启

reboot
Run Code Online (Sandbox Code Playgroud)

6)创建solr配置文件

cd /opt/solr-8.7.0/
sudo -i -u solr /opt/solr-8.7.0/bin/solr create -c haystack
Run Code Online (Sandbox Code Playgroud)

将在此处创建配置文件目录:/var/solr/data/haystack/

systemctl restart solr
Run Code Online (Sandbox Code Playgroud)

7)settings.py中的Haystack设置

INSTALLED_APPS = [
    "django.contrib.admin",
    ...
    "haystack",
]

HAYSTACK_CONNECTIONS = {
    "default": {
        "ENGINE": "haystack.backends.solr_backend.SolrEngine",
        "URL": "http://127.0.0.1:8983/solr/haystack",
        "INCLUDE_SPELLING": True,
    },
}
Run Code Online (Sandbox Code Playgroud)

重启supervisord:

systemctl restart supervisord
Run Code Online (Sandbox Code Playgroud)

8)切换到虚拟环境

source path_to_your_venv_activate_script # (example: source /tmp/venv/django/bin/activate)
cd path_to_your_manage_py_location_directory
Run Code Online (Sandbox Code Playgroud)

9)创建模式

cp -p /var/solr/data/haystack/conf/managed-schema /var/solr/data/haystack/conf/managed-schema.copy
python manage.py build_solr_schema > /var/solr/data/haystack/conf/managed-schema
Run Code Online (Sandbox Code Playgroud)

在文件中/var/solr/data/haystack/conf/managed-schema替换

<field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/>
Run Code Online (Sandbox Code Playgroud)

<!-- <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> -->
<field name="django_ct" type="text_general" indexed="true" stored="true" multiValued="false"/>
Run Code Online (Sandbox Code Playgroud)

在文件中/var/solr/data/haystack/conf/managed-schema找到最后一个</fieldType>并在其后面添加

<!-- NRR manual insert start -->
<!-- Lines from origin managed-schema: -->
<fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
<fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
<fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
<fieldType name="pdoubles" class="solr.DoublePointField" docValues="true" multiValued="true"/>
<fieldType name="pfloat" class="solr.FloatPointField" docValues="true"/>
<fieldType name="pfloats" class="solr.FloatPointField" docValues="true" multiValued="true"/>
<fieldType name="pint" class="solr.IntPointField" docValues="true"/>
<fieldType name="pints" class="solr.IntPointField" docValues="true" multiValued="true"/>
<fieldType name="plong" class="solr.LongPointField" docValues="true"/>
<fieldType name="plongs" class="solr.LongPointField" docValues="true" multiValued="true"/>
<!-- NRR manual insert end -->
Run Code Online (Sandbox Code Playgroud)

复制currency.xml到您的工作目录:

cp -p /opt/solr-8.7.0/example/example-DIH/solr/solr/conf/currency.xml /var/solr/data/haystack/conf/

chown solr:solr /var/solr/data/haystack/conf/currency.xml
Run Code Online (Sandbox Code Playgroud)

10)重启solr:

systemctl restart solr
Run Code Online (Sandbox Code Playgroud)

11)重建索引

python manage.py rebuild_index --noinput
Run Code Online (Sandbox Code Playgroud)