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

Cha*_*ith 5 php elasticsearch

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

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

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

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

                  "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be"}
               }
           }
     }
 }
Run Code Online (Sandbox Code Playgroud)

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

但是我想尝试匹配多个GUIDS

所以它目前看起来像

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

                  "guid":{"operator" : "or","query":"bd2acb42-cf01-11e2-ba92-12313916f4be d1091f08-ceff-11e2-ba92-12313916f4be"}
               }
           }
     }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Lou*_*eau 4

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

    "guid" : {
      "type" : "string",
      "index" : "not_analyzed"
    }
Run Code Online (Sandbox Code Playgroud)

然后手动构建查询即可。

{
    "bool" : {
        "should" : [
            {
                "term" : { "guid" : "bd2acb42-cf01-11e2-ba92-12313916f4be" }
            },
            {
                "term" : { "guid" : "d1091f08-ceff-11e2-ba92-12313916f4be" }
            }
        ],
        "minimum_number_should_match" : 1
    }
}
Run Code Online (Sandbox Code Playgroud)