Elasticsearch2.x 全文检索之——Match Query

本文详细介绍了Elasticsearch2.x中的Match Query,包括如何进行全文检索,如何控制查询精度。Match Query会分析字段类型,对查询文本分词,并对匹配的文档打分。在搜索词'quick'的例子中,文档1因其标题最短而排名首位,文档3因出现两次'quick'而优于文档2。
摘要由CSDN通过智能技术生成

Match Query

Match Query是es官网推荐的首选搜索方式,它的工作流程是先对查询文本分词,然后看分词后的词条是否出在于对应字段上,在字段上出现的词条数越多匹配度越大,所以默认情况下词条与词条之间是通过 “or”来连接。
看下面的例子,先创建一个索引并索引4个文档:
PUT /my_index
{ "settings": { "number_of_shards": 1 }} 

POST /my_index/my_type/_bulk
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }
下面的查询,是针对title的match搜索,搜索词:QUICK!
GET /my_index/my_type/_search
{
    "query": {
        "match": {
            "title": "QUICK!"
        }
    }
}
上面的查询处理流程:
  1. 检查字段类型,查询文本和字段都需要是analyzed string
  2. 对查询文本进行分词
  3. 查找匹配的文档,搜索词quick对应的文档时1,2,3
  4. 对搜索出的文档打分
搜索的结果如下:
"hits": [
 {
    "_id":      "1",
    "_score":   0.5, 
    "_source": {
       "title": "The quick brown fox"
    }
 },
 {
    "_id":      "3",
    "_score":   0.44194174, 
    "_source": {
       "title": "The quick brown fox jumps over the quick dog"
    }
 },
 {
    "_id":      "2",
    "_score":   0.3125, 
    "_source": {
       "title": "The quick brown fox jumps over the lazy dog"
    }
 }
]
  1. 文档1排在第一是因为title是最短的
  2. 文档3排在文档2的前面是因为title中出现了2次quick
match query精度控制
match查询默认在词与词之间使用or操作符,当然我们也可以设置用and进行控制,比如我们希望在搜索时必须出现某几个词,如下:
{
    "query": {
        "match": {
            "title": {      
                "query":    "蜜蜂的蜂窝",
                "operator": "and"
            }
        }
    }
}
上面的查询使用ik_smart会分出“蜜蜂”和“蜂窝”,该查询会匹配那些同时出现“蜜蜂”和“蜂窝”的文档。

有时候,我们只通过and和or这种逻辑操作符来控制查询太过绝对,这时可以使用另一个参数来做到and和or中间的一个权衡:minimum_should_match,如下:
GET /my_index/my_type/_search
{
  "query": {
    "match": {
      "title": {
        "query": "quick brown dog",
        "minimum_should_match": "75%"
      }
    }
  }
}
上面的查询文档会分出3个词:“quick”、“brown”、“dog”,如果被搜索的文档中title字段只包含其中两个也是不会被匹配到的,因为匹配两个的情况下,词的匹配百分比是66.6%小于预设的75%,如果将minimum_should_match设置为66%,那么在匹配两个词的情况也会返回文档,因为66%小于66.6%。从上面的例子中我们可以看出通过使用minimum_should_match参数可以更加精确的控制词匹配的百分比。






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值