elasticsearch学习六、完全匹配搜索、精确匹配

 时间:2024-10-12 05:12:25

实现类似于关系型数据库中的 like '%querystring%'之前一直基于ik分词,以为无法实现完全匹配。现在实现整理出来,记录下备忘、共享。1、先看下ES提供的NGram Tokenizer2、实现完全匹配

NGram Tokenizer

1、先看下NGram分词器属性min_gram:单个词的最小长度,默认1max_gram:但歌词的最大长度,默认2token_chars:大概就是es会按照不在列表中的字符集合进行文本分割(具体意思大家看图原文^_^)

elasticsearch学习六、完全匹配搜索、精确匹配

3、先看个example,curl -XPUT 'localhost:9200/test' -d ' { "settings" : { "analysis" : { "analyzer" : { "my_ngram_analyzer" : { "tokenizer" : "my_ngram_tokenizer" } }, "tokenizer" : { "my_ngram_tokenizer" : { "type" : "nGram", "min_gram" : "2", "max_gram" : "3", "token_chars": [ "letter", "digit" ] } } } } }'

elasticsearch学习六、完全匹配搜索、精确匹配

完全匹配实现

1、定义一个charsplit的分析器,使用的ngram分词。min_gram、max_gram为1,同时我只需要匹配letter、digit、punctuation。curl-XPUT'localhost:9200/dm_v1'-d'{"settings":{"analysis":{"analyzer":{"charSplit":{"type":"custom", "tokenizer":"ngram_tokenizer"}},"tokenizer":{"ngram_tokenizer":{"type":"nGram","min_gram":"1","max_gram":"1","token_chars":["letter","digit","punctuation"]}}}}}'

elasticsearch学习六、完全匹配搜索、精确匹配elasticsearch学习六、完全匹配搜索、精确匹配

4、最后记录一个组合的多条件查询要求:查出样本1中,内容或者url或标题包含‘new’的所有记录。需要注意的是fields中的属性include_in_all都是true的,这样_all才能对该字段搜索{"query":{ "bool": {"must":[{"term":{"sample":1}},{ "multi_match": { "query": "new", "type": "phrase", "slop": 0, "fields": [ "content","url","bid_title" ], "analyzer": "charSplit", "max_expansions": 1 } }]}}}

elasticsearch学习六、完全匹配搜索、精确匹配
  • 哔哩哔哩视频播放速度测试在哪
  • 招聘员工对企业的作用
  • 华为P10手机如何简单快速分屏
  • 黄牌10坐一下中型客车有哪些车型
  • MaxBulk Mailer电子邮件地址如何提取收件人姓名
  • 热门搜索
    爱抚的近义词 警告的近义词 烫伤后起水泡怎么办 怎么能快速瘦腿 四季豆怎么做好吃 极其的近义词 开机密码怎么设置 健康常识 电子书怎么下载 古老的近义词