5

我有一个弹性搜索查询,我试图正确匹配,字段数据本身包含 -(破折号),字符串数据是 GUIDS

它没有正确匹配,因为它将术语分成单独的单词,由 -

此后,我将查询更改为使用 match_phrase 查询,如下所示:

"query": {
    "filtered": {
           "query": {
              "match_phrase":{

                  "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be"}
               }
           }
     }
 }

当我试图只匹配一个 GUIDS 时,这很好用。

但是我正在尝试匹配多个 GUIDS

所以它目前看起来像

"query": {
    "filtered": {
           "query": {
              "match_phrase":{

                  "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be d1091f08-ceff-11e2-ba92-12313916f4be"}
               }
           }
     }
}

我认为它不起作用,因为它试图匹配整个字符串,而不是单独匹配每个 GUID。

我尝试在查询中添加“分析器”:“空白”,但这完全破坏了查询。

那么确保查询查找整个 GUID 字符串并允许匹配多个 GUID 的最佳方法是什么?

4

1 回答 1

4

出于类似目的,我一直将字段映射设置为 not_analyzed。

    "guid" : {
      "type" : "string",
      "index" : "not_analyzed"
    }

然后手动构建查询。

{
    "bool" : {
        "should" : [
            {
                "term" : { "guid" : "bd2acb42-cf01-11e2-ba92-12313916f4be" }
            },
            {
                "term" : { "guid" : "d1091f08-ceff-11e2-ba92-12313916f4be" }
            }
        ],
        "minimum_number_should_match" : 1
    }
}
于 2013-06-10T20:15:30.810 回答