We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
By failing to prepare, you are preparing to fail.
Creating a Solr core
Solr
core
URL
http://ip:port/solr/coreName
coreName
Tomcat
730048
8080
apache-tomcat-8.0.39\conf\server.xml
<!--8080 改成 8888 或者其他--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
blog
apache-tomcat-8.0.39\webapps\solr\solr_home
blog/ data/ conf/ protwords.txt schema.xml solrconfig.xml stopwords.txt synonyms.txt lang/ stopwords_en.txt
solrconfig.xml
<?xml version="1.0" encoding="utf-8" ?> <config> <luceneMatchVersion>LUCENE_36</luceneMatchVersion> <requestHandler name="/select" class="solr.StandardRequestHandler" default="true" /> <requestHandler name="/update" class="solr.UpdateRequestHandler" /> <!--requestHandler name="/admin" class="solr.admin.AdminHandlers" /--> <requestHandler name="/admin/ping" class="solr.PingRequestHandler"> <lst name="invariants"> <str name="qt">search</str> <str name="q">*:*</str> </lst> </requestHandler> </config>
solr.admin.AdminHandlers
Solr 6
schema.xml
<?xml version="1.0" ?> <schema name="default" version="1.5"> </schema>
schema
Add Core
Core
name: blog
instanceDir: blog
dataDir: data
data
config: solrconfig.xml
Solr XML
schema: schema.xml
Django
Haystack
django-haystack
pip install django-haystack==2.5.1
PyCharm
pysolr
pip install pysolr==3.6.0
settings.py
haystack
INSTALLED_APPS
INSTALLED_APPS = ( # ... 'haystack', )
HAYSTACK_CONNECTIONS
HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.solr_backend.SolrEngine', 'URL': 'http://localhost:8888/solr/blog' } }
search_indexes.py
from haystack import indexes from .models import Post class PostIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) publish = indexes.DateTimeField(model_attr='publish') def get_model(self): return Post def index_quertset(self, using=None): return self.get_model().published.all()
Post
SearchIndex
Model_name+Index
document=True
primary field
text
use_template=True
数据模板
索引
title
publish
model_attr
get_model()
index_queryset()
published
templates
search/indexes/blog/post_text.txt
{{ object.title }} {{ object.tags.all|join:", " }} {{ object.body }}
object.title
object.tags.all
object.body
The text was updated successfully, but these errors were encountered:
No branches or pull requests
0x01 Django
Creating a Solr core
Solr
可以对多个core
进行综合管理,并接受请求选择特定的一个或多个core
执行相关任务core
从文件结构的角度来看,主要包括一份索引(也可能包括拼写检查的索引)、一堆配置文件core
拥有自己独立的索引以及事务日志,相当于一个索引库,每个core
拥有自己独立的core
目录,拥有自己独立的core
访问URL
,即http://ip:port/solr/coreName
,这里的coreName
就是要访问的core
名称Tomcat
,打开Solr
管理页面Tomcat
提示730048
错误的话,说明端口被占用,可能是Tomcat
已启动或者被其他线程占用了端口,只需要修改默认的8080
端口便可以apache-tomcat-8.0.39\conf\server.xml
blog
创建一个core
apache-tomcat-8.0.39\webapps\solr\solr_home
中创建一个文件夹blog
solrconfig.xml
solr.admin.AdminHandlers
这个类在Solr 6
之后就已经移除了,所以这句话需要注释schema.xml
schema
,schema.xml
是Solr
中用于定义字段类型和字段的配置文件Add Core
增加一个新的Core
name: blog
--core
的名字instanceDir: blog
--core
的目录dataDir: data
-- 索引的data
的目录config: solrconfig.xml
--Solr XML
的配置文件schema: schema.xml
Solr
创建好Core
后,给Django
安装Haystack
Haystack
来调用Solr
django-haystack
pip install django-haystack==2.5.1
或者PyCharm
安装Solr
,还需要pysolr
模块,继续安装pip install pysolr==3.6.0
或者PyCharm
安装Haystack
settings.py
,增加haystack
到INSTALLED_APPS
中haystack
设置搜索引擎,编辑settings.py
,增加HAYSTACK_CONNECTIONS
Haystack
就可以和Solr
一起使用了Haystack
在被使用的时候,会在应用中创建一个search_indexes.py
文件,也就是创建索引,为指定的数据添加一个索引目录blog
下创建search_indexes.py
Post
模型的SearchIndex
,告诉Haystack
在这个模型中哪个数据在搜索引擎内被索引,类名必须为需要检索的Model_name+Index
,这里需要检索Post
document=True
,表示Haystack
和搜索引擎将使用此字段的内容作为索引进行检索(primary field
),其他的字段只是附属的属性,方便调用,并不作为检索数据document=True
,则一般约定此字段名为text
,这是在SearchIndex
类里面一贯的命名,以防止后台混乱Haystack
提供了use_template=True
在text
字段,这样就允许我们使用数据模板
去建立搜索引擎索引
的文件,说得通俗点就是用模板来表示索引的东西,例如Post
的title
字段,这样我们可以通过title
内容来检索Post
数据publish
字段是日期时间字段,也会被索引,用model_attr
参数来表明这个字段符合Post
模型中的publish
字段get_model()
函数必须要有,返回索引的模型文件index_queryset()
函数返回所有索引对象的查询集(这里只包括了published
)templates
中创建如下路径和文件 :search/indexes/blog/post_text.txt
object.title
object.tags.all
object.body
这三个字段建立索引,当检索的时候会对这三个字段做全文检索匹配The text was updated successfully, but these errors were encountered: