如何对查询进行分组以匹配elasticsearch中的一个或多个单词?

时间:2017-09-07 23:06:40

标签: php elasticsearch

我有这个查询

    {
      "bool": {
        "should": [
          {
            "multi_match": {
              "query": "LAS VEGAS, HENDERSON",
              "fields": ["city"]
            }
          }
        ]
      }
    }

返回:

"city": "LAS VEGAS",
"city": "LAS CRUCES",
"city": "HENDERSON",

注意LAS CRUCES结果。我不想要它。

一种方法是将它写成这样:

      "bool": {
        "should": [
          {
            "match": {
              "city": {
                "query": "LAS VEGAS",
                "operator": "and"
              }
            }
          },
          {
            "match": {
              "city": {
                "query": "HENDERSON",
                "operator": "and"
              }
            }
          }
        }

但我更喜欢第一种方法,如果可以的话。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

multi_match接受operator标记,该标记可设置为or

   {
      "bool": {
        "should": [
          {
            "multi_match": {
              "query": "LAS VEGAS, HENDERSON",
              "fields": ["city"],
              "operator": "or"
            }
          }
        ]
      }
    }

答案 1 :(得分:0)

您可以使用GET /_search { "query": { "query_string" : { "fields" : ["city"], "query" : "\"LAS VEGAS\" OR \"HENDERSON\"" } } } 查询,如下所示:

city

您需要将值括在引号中以搜索完整的词组。

如果您使用text字段搜索完全匹配,则应考虑将其从keyword更改为city的映射类型。它会带给你很好的表现。

如果您的keyword字段属于terms query类型,那么您可以使用GET /_search { "query": { "constant_score" : { "filter" : { "terms" : { "city" : ["LAS VEGAS", "HENDERSON"]} } } } } 获得相同的结果,如下所示:

.
├── pom.xml
└── src
    └── main
        ├── java
        │   └── mywebapp
        │       ├── config
        │       │   ├── MyWebAppInitializer.java
        │       │   ├── RootConfig.java
        │       │   └── WebConfig.java
        │       └── web
        │           └── HomeController.java
        ├── resources
        └── webapp
            └── WEB-INF
                ├── views
                │   └── home.jsp
                └── web.xml

希望这有帮助!