【问题标题】:Meaning must and operator combination含义必须和运算符组合
【发布时间】:2017-10-11 06:54:59
【问题描述】:

我的编码如下:

{
"query": {
  "bool": {
     "must": [
        {
           "multi_match": {
              "query": [
                 "5347"
              ],
              "fields": [
                 "stkno",
                 "tag",
                 "content",
                 "htext"
              ],
              "operator": "or"
           }
        }
     ]
  }
 },
 "size": 500,
 "sort": [
  {
     "CDate": {
        "order": "desc"
      }
    }
  ]
}

如果must和operator结合在一起是什么意思?如果使用必须和运算符是或,Elasticsearch 将在条件下运行?

谢谢

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    Must 在多个查询之间就像And。 举个例子:

      "query": {
        "bool": {
            "must": [
               {  // Query 1},
               { // Query 2}
            ]
         }
       }
    

    如果Query1 AND Query2 都返回结果,上述查询将返回结果。学习musthere

    而上述查询中的operator OR 适用于multi_match 查询。

    举个例子:

        "multi_match": {
                  "query": [
                     "text1 text2"
                  ],
                  "fields": [
                     "field1",
                     "field2"
                  ],
                  "operator": "or"            
               }
    

    这里 OR 运算符将在 multimatch 查询中提到的 text1 和 text2 之间工作。这意味着如果任何字段 field1 或 field2 包含 text1 OR text2,则将返回文档。学习operatorhere

    现在,如果我们考虑上面给出的示例。由于您在 must 子句中只有一个查询,因此您将无法看到 AND 行为。

    而您在 multimatch 查询中只有文本 "5347" ,您将无法看到多匹配查询的 OR 行为

    希望这能澄清您的疑问。

    【讨论】:

    • 如果文本 1 和测试 2 是 "4448.KL" 和 "6599.KL" 并且运算是 'And' 和多重匹配,它只能找到 "6599.KL" ,然后是 4448 .KL 找不到,也是因为多重匹配?
    • 没有得到你。你能指定你运行的查询吗?
    • 发布新闻/bursa/_search { "query": { "bool": { "must": [{ "match": { "category": "36" } } ],"must" : [ { "multi_match": { "query": [ "4448.KL","6599.KL" ], "fields": [ "stkno", "tag" ,"content" ,"htext" ] ,"operator ": "and"} } ],"must": [{ "range": { "CDate": { "gt": "2010-01-01" , "lte": "2017-05-30T23:59: 59" } } } ] } }, "size": 1000, "sort": [ { "CDate": { "order": "desc" } } ] }
    • 以上是我的查询....at category:36, 4448.KL","6599.KL 肯定有索引...但它只能搜索 6599.KL 和 4448。 KL 找不到
    • 我认为您的查询不正确。您不能在multi_match 查询子句中指定数组。给出此错误[multi_match] unknown token [START_ARRAY] after [query]"
    猜你喜欢
    • 2012-02-13
    • 2018-04-24
    • 2012-12-10
    • 2017-07-20
    • 2020-09-10
    • 2019-03-27
    • 2016-09-17
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多