ElasticSearch-以任何顺序匹配所有术语

时间:2018-09-06 09:04:16

标签: elasticsearch

我正在尝试编写Elasticsearch(v5.1)查询,以检查字段中的所有令牌是否与搜索项中的所有令牌匹配,但以任何顺序 >。

例如,该字段可以是:

full_name: 'Will Smith'

搜索词Will SmithSmith Will将匹配。但是搜索WillSmith不匹配。

我尝试使用and运算符进行匹配查询,并使用slop进行短语查询,但是所有这些确保了术语搜索都在字段中,而不是确保字段中的所有术语都在字段中搜索。

我可以用reversed_name之类的新字段建立索引,但是想知道我是否缺少某个查询选项。

1 个答案:

答案 0 :(得分:2)

您应该看一下带有“ minimum_should_match”参数的布尔查询。在您的情况下,看起来像这样:

 {   
    "query":{
        "bool" : {
            "should" : [
               {"term" : { "name" : "Will" }},
               {"term" : { "name" : "Smith" }}
             ],
             "minimum_should_match" : 2
          }
       }
    }
}

这将匹配“威尔·史密斯”和“史密斯·威尔”。如果您只想搜索Will或Smith,则需要将其更改为:

 {   
    "query":{
        "bool" : {
            "should" : [
               {"term" : { "name" : "Will" }}
             ],
             "minimum_should_match" : 1
          }
       }
    }
}

这次将仅匹配“ Will”。 (完全匹配)