短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配
下面就是根据下面的脚本例子来看整个短语匹配的有哪些做用和优势html
GET /my_index/my_type/_search { "query": { "match_phrase": { "title": "quick brown fox" } } } //查询分词以后连续的 //例如 brown fox 能够查询到,可是quick fox 查询不到 //也可使用下面的方式,这两种方式是相同的,只不过写法不一样而已 POST /product/_search { "query": { "match": { "name":{ "query": "1130 对接", "type": "phrase" } } } }
根据上面的咱们对短语匹配有些总结curl
对 短语查询进行一些优化
经过加入slop参数,能够灵活的控制短语查询的,
slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配elasticsearch
POST product/_search { "query": { "match_phrase": { "name": { "query": "1130 对接 测试", "slop" : 10 } } } }
越近越好,当咱们给一个短语查询设置了很高的额slop时,就像下面这样分布式
POST product/_search { "query": { "match_phrase": { "name": { "query": " 上海 自由行", "slop" : 100 } } } } //可是虽然咱们给了很高的slop值,咱们能够根据返回的score分数值来进行判断几个字段是否更加的临近。
prefix 前缀查询
前缀查询,就是将一个词从头开始查。 例如某个数据是上海一日游 可利用前缀查询查询 上海学习
POST /product/_search { "query": { "prefix": { "departureCitys": { "value": "上" } }· } }
prefix 前缀查询,不会在搜索的时候分析字符串,它假定传入的字符串就是正要查询的前缀
默认状态下, prefix 查询不作相关度评分计算,它只是将全部匹配的文档返回,并为每条结果赋予评分值 1 测试
POST /product/_search { "explain": true, "size": 1, "query": { "match": { "name": "三亚" } } }
match_phrase_prefix 查询, 短语查询和前缀查询的组合优化
GET /product/_search { "query": { "match_phrase_prefix": { "name": { "query": "上 海", "slop" : 20, "max_expansions": 50 } } } }
slop 来使整个词序位置不是那么的严格
参数 max_expansions 控制着能够与前缀匹配的词的数量ui
- ES默认窗口10000。能够用修改index.max_result_window参数来解决问题 - curl -XPUT http://127.0.0.1:9200/product/_settings -d '{ "index" : { "max_result_window" : 100000}}'