Django 使用es实现全文检索
django 对接elasticsearch实现全文检索
本文demo代码请加群获取
第一步:安装elasticsearch环境(docker安装)
Copypip3 install drf-haystack
pip3 install elasticsearch
pip3 install djangorestframework
第三步:在django项目配置文件settings.py中注册应用
CopyHAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://172.16.209.100:9200/', # 此处为elasticsearch运行的服务器ip地址,端口号固定为9200
'INDEX_NAME': 'test', # 指定elasticsearch建立的索引库的名称
},
}
# 当添加、修改、删除数据时,自动生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 指定搜索结果每页的条数
# HAYSTACK_SEARCH_RESULTS_PER_PAGE = 1
第五步:创建索引类
创建文件templates/search/indexes/app01/book_text.txt文件中定义
Copy{{ object.name }}
{{ object.publish }}
第七步:手动更新索引
Copyfrom drf_haystack.serializers import HaystackSerializer
from rest_framework.serializers import ModelSerializer
from app01 import models
from app01.search_indexes import BookIndex
class BookSerializer(ModelSerializer):
class Meta:
model=models.Book
fields='__all__'
class BookIndexSerializer(HaystackSerializer):
object = BookSerializer(read_only=True) # 只读,不可以进行反序列化
class Meta:
index_classes = [BookIndex]# 索引类的名称
fields = ('text', 'object')# text 由索引类进行返回, object 由序列化类进行返回,第一个参数必须是text
第九步:创建视图类
Copyfrom django.conf.urls import url
from django.contrib import admin
from rest_framework import routers
from app01.views import BookSearchView
router = routers.DefaultRouter()
router.register("book/search", BookSearchView, base_name="book-search")
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
urlpatterns += router.urls
第十一步:测试
Copyhttp://127.0.0.1:8000/?text=北 #查询出名字中和出版社中有北的数据
