match_phrase elasticsearch中的可选术语

时间:2018-08-22 13:27:39

标签: elasticsearch elasticsearch-6

我正在使用Elasticsearch 6,并具有以下查询

{  
 "query":{  
  "bool":{  
     "should":[  
        {  
           "match_phrase":{  
              "fieldOne":{  
                 "query":"One two three",
                 "slop":10
              }
           }
        },
        {  
           "match_phrase":{  
              "fieldTwo":{  
                 "query":"one two three",
                 "slop":10
              }
           }
        }

     ]
  }
 }
}

当我想将两个字段与查询中的术语匹配时,此方法效果很好。

但是,如果我在fieldOne中有一个包含术语“一”和“二”的文档,则上面的结果不会返回结果,因为需要“三”。

我似乎找不到一种使查询中的术语成为可选的方式,例如我想说的是在这两个字段中找到任何术语

我使用match_phrase的原因是使用斜线,它允许术语在我也需要的字段中位于不同的位置

1 个答案:

答案 0 :(得分:1)

如果该命令对于使用并不重要,则无需使用match_phrase,只需执行简单的match查询即可

    {  
       "match":{  
          "fieldOne":{  
             "query":"one two three"
          }
       }
    },

然后,如果您需要至少两个词来匹配,则可以使用minimum_should_match

    {  
       "match":{  
          "fieldOne":{  
             "query":"one two three",
             "minimum_should_match": 2
          }
       }
    },