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

标签 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 视为单独的术语.

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

最佳答案

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

query_string : Read the reserved characters section

所以要搜索

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

Your query must be "A&B\\*" such that the query_string parser treats it as a * wildcard operator.

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

  2. 当您搜索 "A&B *" 时,空格是保留的 性格所以它 现在搜索“A&B”(或)“*”,因此您在此得到匹配 案例。

关于elasticsearch - 如何处理 ElasticSearch 字段中的标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32855871/

相关文章:

elasticsearch - 使用FriendsOfSymfony/FOSElasticaBundle实现 Elasticsearch 时自动映射实体

sorting - 基于出现的 Elasticsearch 衰减分数

elasticsearch - 在Elasticsearch 6.6和NEST 6.6中具有排序和分页变量的SearchTemplate

apache - Elasticsearch :匹配词组产生不必要的结果

elasticsearch - 如何在Kibana中搜索嵌套键

amazon-web-services - 如何将我的 AWS Elastic Search Service 设为私有(private)?

elasticsearch - 在 Elasticsearch 中使用脚本字段时如何返回所有字段

elasticsearch - 查找文本等于要求之一的产品

elasticsearch - 通过非映射/可搜索对象属性有效地对结果进行排序

elasticsearch - 查询嵌套对象时,Elasticsearch查询无法返回结果