如何处理ElasticSearch字段中的标点符号

时间:2015-09-30 00:27:52

标签: elasticsearch

我在Elastic Search中存储了一个文档中的字段,我希望将其作为全文字段进行分析。在一种情况下,它包含name字段的值,如下所示:

A&B Corp

我希望能够使用这样的查询在文档中搜索自动完成窗口小部件(假设用户在自动填充字段中键入A&B)。目的是将包含任何术语的文档与键入的前缀匹配。

{   "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "A&B*",
          "fields": [
            "firstName",
            "lastName",
            "name",
            "key",
            "email"
          ]
        }
      },
      "filter": {
        "terms": {
          "environmentId": [
            "foo"
          ]
        }
      }
    }
  }
}

```

我对名称字段的映射如下所示:

"name": {
    "type": "string"
},

但是,我没有结果。查询结构适用于在该字段中没有&的文档,因此我非常确定这是问题的一部分。

但是,我不确定如何处理这个问题。我很确定我仍然想分析该字段进行全文搜索。

此外,如果我在查询中*之前添加空格(即"query": "A&B *",),那么我会得到包含A&B的结果,所以我不会想想它只是丢弃&符号并将AB视为单独的术语。

我应该更改我的映射吗?查询?

1 个答案:

答案 0 :(得分:2)

Query_string查询有一组需要转义的保留字符。

query_string : Read the reserved characters section

所以要搜索

  

'A& B'(或)'A& B Corp'(或)'A& B ....'

     

您的查询必须是“A& B \\ *”,以便query_string解析器处理   它作为*通配符运算符。

  1. 目前您的查询正在搜索完全匹配 “A& B *”它希望asterik成为您数据的一部分。

  2. 当您搜索“A& B *”时,空格是保留的 性格如此     现在搜索“A& B”(或)“*”,因此你得到一个匹配     情况下。