使用elasticsearch中的短划线匹配整个字符串

时间:2013-06-07 07:27:00

标签: php elasticsearch

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

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

分割的单独单词

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

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

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

当我尝试匹配一个GUID时,这很好用。

但是我想尝试匹配多个GUID

所以它目前看起来像

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

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

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

我尝试在查询中添加“analyzer”:“whitespace”,但这完全破坏了查询。

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

1 个答案:

答案 0 :(得分: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
    }
}