elasticsearch学习

一、分词器指定
1、如果想要在创建索引和查询时分别使用不同的分词器,ElasticSearch也是支持的。
2、在创建索引,指定analyzer,ES在创建时会先检查是否设置了analyzer字段,如果没定义就用ES预设的
3、在查询时,指定search_analyzer,ES查询时会先检查是否设置了search_analyzer字段,如果没有设置,还会去检查创建索引时是否指定了analyzer,如果有则使用;还是没有还设置才会去使用ES预设的

二、ES使用分词器
1、插入文档时,将text类型的字段做分词然后插入倒排索引,此时就可能用到analyzer指定的分词器
2、在查询时,先对要查询的text类型的输入做分词,再去倒排索引搜索,此时就可能用到search_analyzer指定的分词器

三、demo(使用中文+拼音分词器)

PUT order
{
   "mappings" : {
      "properties" : {
      
        "fullTitle" : {
          "type" : "text",
          "fields" : {
            "suggest" : {
              "type" : "completion",
              "analyzer" : "ik_smart_pinyin",
              "preserve_separators" : true,
              "preserve_position_increments" : true,
              "max_input_length" : 50
            }
          },
          
          "analyzer" : "ik_max_word_pinyin",
          "search_analyzer": "ik_smart_pinyin", 
          "store": true
        },
        "id" : {
          "type" : "long"
        },
        "longTitle" : {
          "type" : "text",
          "copy_to" : [
            "fullTitle"
          ],
          "analyzer" : "ik_max_word_pinyin",
          "search_analyzer": "ik_smart_pinyin"
        },
        "title" : {
          "type" : "text",
          "copy_to" : [
            "fullTitle"
          ],
          "analyzer" : "ik_max_word_pinyin",
          "search_analyzer": "ik_smart_pinyin"
        },
        "creator":{
          "type": "text",
          "fields": {
            "mykeyword":{
              "type":"keyword"
            }
          }
        },
        "price":{
          "type": "float"
        }
      }
    },
   "settings" : {
      "index" : {
        "refresh_interval" : "5s",
        "number_of_shards" : "5",
        "number_of_replicas": "1"
      },"analysis": {
            "analyzer": {
                "ik_smart_pinyin": {
                    "type": "custom",
                    "tokenizer": "ik_smart",
                    "filter": ["my_pinyin"]
                },
                "ik_max_word_pinyin": {
                    "type": "custom",
                    "tokenizer": "ik_max_word",
                    "filter": ["my_pinyin"]
                }
            },
            "filter": {
                "my_pinyin": {
                "type": "pinyin",
                "keep_separate_first_letter": false,
                "keep_full_pinyin": true,
                "keep_original": true,
                "limit_first_letter_length": 16,
                "lowercase": true,
                "remove_duplicated_term": true,
                "keep_joined_full_pinyin": true 
                }
            }
        }

    }
}

 

posted @   b̶i̶n̶g̶.̶  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2013-05-20 c#中能不能直接操作内存,为什么?
2013-05-20 .net GC 和工作原理
2013-05-20 Session丢失解决方案
2013-05-20 什么是mvc
2013-05-20 Linq
点击右上角即可分享
微信分享提示