zoukankan      html  css  js  c++  java
  • 全文检索

    服务器起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】Tomcat安装及端口配置
    【Linux】 JDK安装及配置 (linux-tar.gz版)
    判断集合元素唯一
    linux服务器上部署项目,同时运行两个或多个tomcat
    阿里服务器CentOS报错base ls command not found
    java接受安卓及ios App上传的图片,并保存到阿里OSS
    java-随机生成用户名(中文版及英文版)
    java-将评论内容过滤特殊表情emoj符号,保存到mysql中
    jdbc连接阿里云服务器上的MySQL数据库 及 数据库IP限制
  • 原文地址:https://www.cnblogs.com/plyc/p/14423339.html
Copyright © 2011-2022 走看看