Elasticsearch的含义必须与multimatch一起使用

时间:2017-05-24 14:28:58

标签: elasticsearch

这是一个代码

GET /news/_search
{
  "query": {
  "bool": {
     "must": [
        {
           "multi_match": {
              "query": "France and Luxembourg",
              "fields": [
                 "stkno",
                 "tag",
                 "content",
                 "htext"
              ],
              "operator": "and"
           }
        },
        {
           "range": {
              "CDate": {
                 "gt": "2017-05-23T14:02:11",
                 "lte": "2017-05-24T23:59:59"
              }
           }
        }
     ]
  }
 },
    "from": 0,
       "size": 100,
    "sort": [
  {
     "CDate": {
        "order": "desc"
     }
  }
  ]
 }

使用上面的命令后,命中总数为2条记录。但有一个词恰恰是“法国和卢森堡”,另一个词只是“法国”。

我的问题如下:

  1. 已经使用'必须',为什么没有只显示'法国和卢森堡'?
  2. 运营商的目的是什么?我已经读过了弹性搜索,但是真的不明白,你能解释一下吗?
  3. 重新编辑:

    我尝试使用如下编码,但结果变空。enter code here

    POST _search
     {
       "query": {
      "bool": {
         "should": [
            {
               "term": {
                  "stkno": "France and Luxembourg"
               }
            },
            {
               "term": {
                  "tag": "France and Luxembourg"
               }
            },
            {
               "term": {
                  "context": "France and Luxembourg"
               }
            },
            {
               "term": {
                  "htext": "France and Luxembourg"
               }
            }
         ],
         "minimum_should_match": 1
      }
      }
      }
    

    感谢...

1 个答案:

答案 0 :(得分:0)

如上所述here,当您使用multi-matchand运算符时,它是字段的多重匹配。所以你的查询变成了

 (+stkno:France +stkno:and +stkno:Luxembourg)
| (+tag:France +tag:and +tag:Luxembourg)
| (+context:France +context:and +context:Luxembourg)
| (+htext:France +htext:and +htext:Luxembourg)

要完全匹配,您可以使用term query

您可以将multi-match部分单独更改为另一个bool查询

                        {
                            "bool": {
                                "should": [
                                    {
                                        "term": {
                                            "stkno": "France and Luxembourg"
                                        }
                                    },
                                    {
                                        "term": {
                                            "tag": "France and Luxembourg"
                                        }
                                   },
                                    {
                                        "term": {
                                            "context": "France and Luxembourg"
                                        }
                                   },
                                    {
                                        "term": {
                                            "htext": "France and Luxembourg"
                                        }
                                    }
                                ],
                                "minimum_should_match": 1
                            }
                        }