一.使用Docker安装Elasticsearch
1.获取Elasticsearch-ik镜像
从仓库拉取镜像
$ sudo docker image pull delron/elasticsearch-ik:2.4.6-1.0
2.配置Elasticsearch-ik
将elasticsearc-2.4.6目录拷贝到home目录下
修改/home/python/elasticsearch-2.4.6/config/elasticsearch.yml第54行。
更改ip地址为本机真实ip地址
3.3.使用Docker运行Elasticsearch-ik
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
二.Haystack扩展建立索引
1.Haystack安装
$ pip install django-haystack
$ pip install elasticsearch==2.4.1
2.Haystack注册子应用和路由
INSTALLED_APPS = [
‘haystack’, # 全文检索
]
#haystack
url(r’^search/’, include(‘haystack.urls’)),
3.Haystack配置
在配置文件中配置Haystack为搜索引擎后端
#Haystack
HAYSTACK_CONNECTIONS = {
‘default’: {
‘ENGINE’: ‘haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine’,
‘URL’: ‘http://192.168.103.158:9200/’, # Elasticsearch服务器ip地址,端口号固定为9200
‘INDEX_NAME’: ‘meiduo_mall’, # Elasticsearch建立的索引库的名称
},
}
#当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = ‘haystack.signals.RealtimeSignalProcessor’
三.Haystack创建索引数据
1.创建索引类
通过创建索引类,指明让搜索引擎对哪些模型字段建立索引
文件名为serach_indexes.py,用于定义索引类
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)
2.创建text字段索引值模板文件
具体在templates/search/indexes/goods/sku_text.txt文件中定义
{{ object.name }}
{{ object.caption }}
模板文件说明:当将关键词通过text参数传递时,此模板指明的name,caption将作为text字段的索引值来进行关键字索引查询
3.手动生成初始索引
$ python manage.py rebuild_index