phpes短语精确搜索,Elasticsearch:在搜索引擎中如何实现完全匹配内容精确_第1页
phpes短语精确搜索,Elasticsearch:在搜索引擎中如何实现完全匹配内容精确_第2页
phpes短语精确搜索,Elasticsearch:在搜索引擎中如何实现完全匹配内容精确_第3页
phpes短语精确搜索,Elasticsearch:在搜索引擎中如何实现完全匹配内容精确_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

phpes短语精确搜索,Elasticsearch:在搜索引擎中如何实现完全匹配(内容精确。。。本⽂地址:在有搜索引擎之前,我们查⽂档常使⽤顺序匹配。⽐如要搜索"我的祖国是花园",需要在⽂档中顺序扫描,找到完全匹配的⼦句。在有了搜索引擎后,我们对查询语句做的处理就不⼀样了。我们通常会先分词,然后查找对应的词条索引,最后得到评分由⾼到低的⽂档列表。我⼀度以为没法实现完全匹配了,直到⼀个硬需求的出现。花了⼀天时间,把完全匹配⽤搜索引擎的思维整理出来。简要描述实现思路,字段按⼀字⼀词的形式分词,再利⽤短语查询来搜索。ES中,可以实现⼀字⼀词的的分词器是NGram。它其实是⼀个上下⽂相连续字符的分词⼯具,可以看官⽅⽂档中的例⼦。当我们将它min_gram和max_gram都设为1时,它会按⼀字⼀词的形式分词。⽐如“shinyke@189.cn”,分词的结果是["s","h","i","n","y","k","e","@","1","8","9",".","c","n"]。/index_name/{"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"]}}}

}}以上语句中,构建了⼀个名为“charSplit”的分析器。它使⽤⼀个名为“ngram_tokenizer”的Ngram分词器。可以⽤如下语句测试charSplit分析器,可以看到⼀字⼀词的效果:"测试语句"把这个分析器在mapping⾥⽤起来:..."sender":{"type":"string","store":"yes","analyzer":"charSplit","fields":{"raw":{"type":"string","index":"not_analyzed"}},...接下来就可以⽤match_phrase来实现完全匹配查询。/{index_name}/{type_name}/_search{"query":{"multi_match":{"query":"@189.cn","type":"phrase",//type指定为phrase"slop":0,//slop指定每个相邻词之间允许相隔多远。此处设置为0,以实现完全匹配。"fields":["sender"],"analyzer":"charSplit",//分析器指定为charSplit"max_expansions":1}},

"highlight":{//测试⾼亮是否正常"pre_tags":[""],"post_tags":[""],"fragment_size":100,"number_of_fragments":2,"require_field_match":true,"fields":{"sender":{}}}}phrase查询原始的作⽤是⽤来做短语查询,它有⼀个重要的特点:有顺序。我们利⽤了它匹配的有序性,限制slop为0,则可实现完全匹配查询。以上语句返回的结果是:{"took":18,"timed_out":false,"_shards":{"total":9,"successful":9,"failed":0},"hits":{"total":1,"max_score":0.40239456,"hits":[{"_index":"index_name","_type":"type_name","_id":"AU9OLIGOZN4dLecgyoKp","_score":0.40239456,

"_source":{"sender":lt189.cn>,李X<189.cn>,秦X<189.cn>,刘X<189.cn>"},"highlight":{"sender":[lt@189.cn>,李X<@189.cn>,秦纯X<@189.cn>,刘X<189773140"]}}]}}到此,就实现了完全匹配查询。实际环境中⽤NGram做⼀字⼀词

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论