当前位置: 首页 > article >正文

es自动补全(仅供自己参考)

elasticssearch提供了CompletionSuggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询效率,对于文档中字段的类型有一些约束:

+ 查询类型必须是:completion

+ 字段内容是多个补全词条形成的数组

PUT /test2
{
  "mappings": {
    "properties": {
      "title":{
        "type": "completion"   #创建字段类型的时候,只能是completion
      }
    }
  }
}

POST /test2/_doc/1
{
  "title":["Sony", "WH-1000XM3"]    #字段的内容是多词条形成的数组
}

POST test2/_doc/2
{
  "title": ["SK-II", "PITERA"]
}
POST test2/_doc/3
{
  "title": ["Nintendo", "switch"]
}

# 查询语法,自动补全
GET /test2/_search
{
  "suggest": {
    "titleSuggest": {    #查询的名称
      "text": "So",        #查询的内容
      "completion": {    #查询补全的类型
        "field": "title",    #字段类型
        "skip_duplicates": true,    #跳过重复的词条
        "size": 10         #查询的大小
      }
    }
  }
}

完成一个hotel酒店的es库创建:(创建了两个自定义的分词器)

PUT /hotel
{
  "settings": {
    "analysis": {
      "analyzer": {
        "text_anlyzer": {
          "tokenizer": "ik_max_word",
          "filter": "py"
        },
        "completion_analyzer": {
          "tokenizer": "keyword",
          "filter": "py"
        }
      },
      "filter": {
        "py": {
          "type": "pinyin",
          "keep_full_pinyin": false,
          "keep_joined_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_length": 16,
          "remove_duplicated_term": true,
          "none_chinese_pinyin_tokenize": false
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "id":{
        "type": "keyword"
      },
      "name":{
        "type": "text",
        "analyzer": "text_anlyzer",
        "search_analyzer": "ik_smart",
        "copy_to": "all"
      },
      "address":{
        "type": "keyword",
        "index": false
      },
      "price":{
        "type": "integer"
      },
      "score":{
        "type": "integer"
      },
      "brand":{
        "type": "keyword",
        "copy_to": "all"
      },
      "city":{
        "type": "keyword"
      },
      "starName":{
        "type": "keyword"
      },
      "business":{
        "type": "keyword",
        "copy_to": "all"
      },
      "location":{
        "type": "geo_point"
      },
      "pic":{
        "type": "keyword",
        "index": false
      },
      "all":{
        "type": "text",
        "analyzer": "text_anlyzer",
        "search_analyzer": "ik_smart"
      },
      "suggestion":{
          "type": "completion",
          "analyzer": "completion_analyzer",
          "search_analyzer": "ik_smart"  # 使用这个为了拼音和汉字都可以使用,而不只是拼音
      }
    }
  }
}

java代码查询:

 @Test
    public void completionTest() throws IOException {
        SearchRequest request = new SearchRequest("hotel");

        request.source().suggest(new SuggestBuilder().addSuggestion(
                "suggestions",
                SuggestBuilders.completionSuggestion("suggestion")
                        .prefix("火")
                        .size(10)
                        .skipDuplicates(true)
        ));

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);

        Suggest suggest = response.getSuggest();
        CompletionSuggestion suggestions = suggest.getSuggestion("suggestions");
        List<CompletionSuggestion.Entry.Option> options = suggestions.getOptions();
        for (CompletionSuggestion.Entry.Option option : options) {
            String string = option.getText().string();
            System.out.println(string);
        }
    }


http://www.kler.cn/a/387215.html

相关文章:

  • js 获取某日期到现在的时长 js 数字补齐2位
  • three.js 杂记
  • STM32单片机WIFI语音识别智能衣柜除湿消毒照明
  • 软件测试项目实战
  • 翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践
  • 欧国联的规则,你都了解吗?
  • 【含开题报告+文档+PPT+源码】基于Springboot和vue的电影售票系统
  • 3. Redis的通用命令介绍
  • 使用 React Native WebView 实现 App 与 Web 的通讯
  • Python 爬虫使用 BeautifulSoup 进行 XPath 和 CSS 选择器定位
  • 3.3 软件需求:面对对象分析模型
  • 三周精通FastAPI:33 在编辑器中调试
  • 性能调优概念和目标
  • 破解数字化转型中的常见挑战:企业架构蓝图实施的关键策略与实用方案
  • Ubuntu 24.04 无边框
  • iOS SmartCodable 替换 HandyJSON 适配记录
  • 使用Python实现智能食品供应链管理的深度学习模型
  • oracle数据坏块处理(二)-逻辑坏块重新格式化处理
  • CUDA系统学习之一软件堆栈架构
  • 初试Lisp语言
  • 【大数据学习 | HBASE】hbase shell基础实操
  • Go语言面向对象编程
  • 【GESP】C++一级真题练习(202312)luogu-B3921,小杨的考试
  • mysql的高级进阶
  • 前端刺客系列----Vue 3 入门介绍
  • 数据挖掘(十)