elasticsearch的安装
使用docker安装
通过pull拉取,或者压缩包解压。
更改配置文件,
将network.host修改为自己的虚拟机ip。
3.使用docker运行elasticsearch,输入命令$ sudo docker run -dti --name=elasticsearch --network=host -v /home/python/elasticsearch-2.4.6/config:/usr/share/elasticsearch/config delron/elasticsearch-ik:2.4.6-1.0
配置
在django框架中需要通过django-haystack来对接搜索引擎的使用,所以务必要在python虚拟环境中安装django-haystack和elasticsearch.
pip3 install django-haystack
pip3 install elasticsearch
1
2
django-haystack是专门给 django 提供搜索功能的。 django-haystack提供了一个统一的API搜索接口,底层可以根据自己需求更换搜索引擎( Solr, Elasticsearch,Whoosh, Xapian 等等),类似于 django 中的 ORM插件,提供了一个操作数据库接口,但是底层具体使用哪个数据库是可以在配置文件中进行设置的。
在django中可以通过使用haystack来调用Elasticsearch搜索引擎。而在drf框架中,也有一个对应的drf-haystack模块,是django-haystack进行封装处理的。
setting中的配置
注册apps
INSTALLED_APPS = [
'haystack',
]
Haystack
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
# elasticsearch运行的服务器ip地址,端口号默认为9200
'URL': 'http://192.168.153.162:9200/', # 配置 IP:port
# elasticsearch建立的索引库的名称,一般使用项目名作为索引库
'INDEX_NAME': 'object_name',
},
}
设置在Django运行时,如果有数据产生变化(添加、修改、删除),
haystack会自动让Elasticsearch实时生成新数据的索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
模型类的创建
完成索引类的创建,一定要在对应的app下创建索引文件indexes_search.py(注:必须是这个名字,否则无法索引)。
from haystack import indexes
from .models import SKU
class SKUIndex(indexes.SearchIndex, indexes.Indexable):
"""SKU索引数据模型类"""
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
"""返回建立索引的模型类"""
return SKU
def index_queryset(self, using=None):
"""返回要建立索引的数据查询集"""
return self.get_model().objects.filter(is_launched=True)
要在templates下创建text文件
具体在templates/search/indexes/goods/sku_text.txt文件中定义
如
{{ object.title }}
{{ object.content }}
{{ object.id }}
1
2
3
4
此模板指明SKU的id、name、caption作为text字段的索引值来进行关键字索引查询。
手动生成初始索引
$ python manage.py rebuild_index