• 全文检索


    服务器起es服务

    第一步:拉取镜像

    docker image pull delron/elasticsearch-ik:2.4.6-1.0

    第二步:运行容器

    docker run -d -p 9200:9200 --name search delron/elasticsearch-ik:2.4.6-1.0



    windows 下安装jdk 1.8版本
    elasticsearch  2.4.6版本
    pip3 install elasticsearch==2.4.1
    下载对应版本的ik分词器
     

    Django 配置es

    第一步:安装依赖包

    pip3 install drf-haystack 
    pip3 install elasticsearch==2.4.1
    pip3 install djangorestframework

    第二步:在django项目配置文件settings.py中注册应用

    INSTALLED_APPS = [
        ...
        'app01.apps.App01Config',        
        'haystack',
        'rest_framework'
    ]

    第三步:在django项目配置文件settings.py中指定搜索的后端

    
    HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
            'URL': 'http://127.0.0.1:9200/',    # 此处为elasticsearch运行的服务器ip地址和端口
            'INDEX_NAME': 'course',           # 指定elasticserach建立的索引库名称
        },
    }
    
    # 搜索结果每页显示数量
    HAYSTACK_SEARCH_RESULTS_PER_PAGE = 5
    # 实时更新index
    HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

    第四步:创建索引model类

    在此之前要先创建model类,并插入数据

    class TestData(models.Model):
        title = models.CharField(max_length=20)
        content = models.TextField()
        cate = models.CharField(max_length=10)
    
        class Meta:
            db_table = 'testdata'


    在需要进行索引的应用的目录下创建文件search_indexes.py, 在该文件内创建该索引类

    我在minapp应用下创建:search_indexes.py

    索引模型类的名称必须是 模型类名称 + Index
    from haystack import indexes
    from .models import TestData
    
    # 索引类
    class BookIndex(indexes.SearchIndex, indexes.Indexable):
        text = indexes.CharField(document=True, use_template=True)
    
        def get_model(self):
            """返回建立索引的模型类"""
            return TestData
    
        def index_queryset(self, using=None):
            """返回要建立索引的数据查询集"""
            return self.get_model().objects.all()

    第五步:在templates目录中创建text字段使用的模板文件

    创建文件templates/search/indexes/APP名称/model类名称加上_text.txt文件中定义

    在这里插入图片描述


    {{ object.title }}
    {{ object.content }}

    第六步:手动更新索引

    TEMPLATES = [
    {
    'DIRS': [os.path.join(BASE_DIR, 'templates')
    }
    ]


    es版本5.0以上不支持string属性,使用以下命令读取时会报错
    python manage.py rebuild_index   #数据库有多少条数据,全部会被同步到es中  

    第七步:创建saystack序列化器

    from drf_haystack.serializers import HaystackSerializer
    from rest_framework.serializers import ModelSerializer
    
    from minapp import models
    
    from minapp.search_indexes import TestData, BookIndex
    
    
    class TestSerializer(ModelSerializer):
        class Meta:
            model = models.TestData
            fields = '__all__'
    
    
    class TestIndexSerializer(HaystackSerializer):
        object = TestSerializer(read_only=True)  # 只读,不可以进行反序列化
    
        class Meta:
            index_classes = [BookIndex]  # 索引类的名称
            fields = ('text', 'object')  # text 由索引类进行返回, object 由序列化类进行返回,第一个参数必须是text




    第八步:创建视图类

    from drf_haystack.viewsets import HaystackViewSet
    from minapp.models import TestData
    from minapp.mySer import TestIndexSerializer
    class BookSearchView(HaystackViewSet):
        index_models = [TestData]    # 数据库模型类
    
        serializer_class = TestIndexSerializer     #saystack序列化器
     

    第九步:添加路由

    '''es '''
    from rest_framework import routers
    from minapp.views import BookSearchView
    router = routers.DefaultRouter()
    router.register("es", BookSearchView, basename="book-search")
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('hh', Index.as_view()),
        # whoosh
        # path('whoosh/', basic_search),
    ]
    
    '''es '''
    urlpatterns += router.urls
     
     
     
     
     
  • 相关阅读:
    同步linux服务器的时间
    Esper学习之四:Context
    Haproxy+Keepalived搭建Weblogic高可用负载均衡集群
    C++中的对象指针
    第十五周oj刷题——Problem M: C++习题 矩阵求和--重载运算符
    《人工智能教程(张仰森)》(二)
    JAVA 并发编程-线程池(七)
    新手学測试----Unit Test(单元測试)
    HDU2193-AVL-数据结构-AVL
    Visual Assist X破解版安装(vs2010助手)
  • 原文地址:https://www.cnblogs.com/plyc/p/14423339.html
Copyright © 2020-2023  润新知