弹性搜索 - 搜索其中包含空格的字符串

Sam*_*ukh 8 elasticsearch

我正在寻找ElasticSearch查询,它将在其中包含空格的字符串上提供完全匹配.

例如 - 我想搜索像'XYZ Company Solutions'这样的词.我尝试了查询字符串查询但它给了我所有的记录,无论搜索结果如何.我也读了帖子,发现我们必须为该字段添加一些映射.我在球场上尝试了'Not_Analyzed'分析仪,但它仍无法正常工作.

如果有人有完整的示例或步骤,那么请您与我分享?

提前致谢.

谢谢,Sameer

Slo*_*ens 5

由于你没有发布你的代码,很难分辨出什么是错的,但"index": "not_analyzed"在你的映射中是处理这个问题的正确方法.

这是一个简单的工作示例.首先,我创建一个使用的映射"index": "not_analyzed":

PUT /test_index
{
    "mappings": {
        "doc": {
            "properties": {
                "name":{
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后添加几个文档进行测试

POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"name":"XYZ Company Solutions"}
{"index":{"_id":2}}
{"name":"Another Company"}
Run Code Online (Sandbox Code Playgroud)

现在我可以使用简单的术语查询获取我想要的文档:

POST /test_index/doc/_search
{
    "query": {
        "term": {
           "name": {
              "value": "XYZ Company Solutions"
           }
        }
    }
}
...
{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_index",
            "_type": "doc",
            "_id": "1",
            "_score": 1,
            "_source": {
               "name": "XYZ Company Solutions"
            }
         }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)

一个长期滤波器甚至匹配查询也将在这种情况下工作.

这是我用来测试它的代码:

http://sense.qbox.io/gist/90fcc7f7a88d58f098c50d5aaf0315fdf06e9e9a

  • 我要补充一点,从5.0版开始,不再支持“字符串”类型,并且引入了两个新类型。默认情况下,“文本”设置为分析,“关键字”默认设置为not_analyzed。因此,如果您使用的是较新版本,则将类型更改为“关键字”就足够了。 (2认同)