《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(1) https://developer.aliyun.com/article/1229943
上述三种查询关键词,只有 foxes 顺利能搜索返回相关文档,其它稍有变化的关键词或者组合的关键词都没有结果返回。
下面我们看看 match。先使用 foxes 搜索一下。
GET my-index-000001/_search?pretty { "query": { "match": { "full_text": "foxes" } } }
正常返回两条结果。
{ ··· "hits" : [ { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "1", "_score" : 0.18232156, "_source" : { "full_text" : "quick brown foxes!" } }, { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "2", "_score" : 0.18232156, "_source" : { "full_text" : "Quick Foxes Brown !" } } ] } }
再使用 "foxes!" 搜索一下。
GET my-index-000001/_search?pretty { "query": { "match": { "full_text": "foxes!" } } }
也正常返回两条结果(节省篇幅此处不展示)。
再使用两个关键词组合的 "brown foxes" 进行搜索。
GET my-index-000001/_search?pretty { "query": { "match": { "full_text": "brown foxes" } } }
这里还是返回两条结果,而不是文档 1(很明显文档1和被搜索的内容更加契合) 。
{ ··· "hits" : [ { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "1", "_score" : 0.36464313, "_source" : { "full_text" : "quick brown foxes!" } }, { "_index" : "my-index-000001", "_type" : "_doc", "_id" : "2", "_score" : 0.36464313, "_source" : { "full_text" : "Quick Foxes Brown !" } } ] } }
最后我们将两个关键词顺序颠倒一下。
GET my-index-000001/_search?pretty { "query": { "match": { "full_text": "foxes brown " } } }
依旧返回两条结果,并且连顺序都一样。
从上面的例子可以窥探出 term 和 match 的一些特点:term查询对被查询的内容有着较高的要求,一旦被查询项发生变化结果也会相应改变;而 match 查询容易查出结果,但也往往会缺乏精度,返回过多的结果 。
那么,大家是否会有下面的问题:
1、term 查询究竟怎么查询才能匹配出更多的结果?
2、match 方法的搜索中有什么办法可以把搜索结果范围缩小?或者搜索出来的结果可以按照更高的匹配度排序?
3、term 与 match 查询背后究竟有什么样的原理?两者会不会有什么关联?
4、term 与 match 查询怎么去实现精确搜索和全文搜索呢?
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(3) https://developer.aliyun.com/article/1229941