【问题标题】:Special characters on query_string in elasticsearchelasticsearch中query_string上的特殊字符
【发布时间】:2016-08-31 10:44:27
【问题描述】:

假设我有一个索引并且我向它添加了一个文档,通过以下语句:

POST /temp/item
{
    "text": "dave@domain.com dave@do-main.com one,two three:four"
}

我想要一些查询语句来返回这个文档,例如:

  1. *@domain*
  2. *@do-*
  3. one,two
  4. three:four --> 这实际上产生了一个错误

每一个被一个类似这样的语句选中:

GET /temp/item/_search
{
 "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "*@domain*",
            "allow_leading_wildcard": "true",
            "default_operator": "AND"
          }
        }
      ]
    }
  }
}

他们都没有返回。

我理解原因是分析器设置为standard,它按任何字边界分割文本。所以我想我必须将分析器更改为whitespace,如下所示:

PUT /temp
{
  "mappings": {
    "item" : {
      "properties" : {
        "text" : {
          "type" :    "string",
          "analyzer": "whitespace"
        }
      }
    }
  }
}

这样做并没有解决问题。没有一条语句返回文档。

问题

  1. 如何配置索引或更改查询语句,以便捕获上述所有示例。
  2. 为什么我将分析器更改为“空白”后,Elasticsearch 没有返回文档?

【问题讨论】:

    标签: elasticsearch elasticsearch-2.0


    【解决方案1】:

    您几乎需要明确地为query_string 指定“字段”以进行匹配。 可以使用default_fieldfields 选项指定大小写

    例子:

    {
     "query": {
        "bool": {
          "must": [
            {
              "query_string": {
                "query": "*@domain*",
                "fields": [
                   "text"
                ], 
                "allow_leading_wildcard": "true",
                "default_operator": "AND"
              }
            }
          ]
        }
      }
    }
    

    如果没有指定 query_string 将使用 _all 字段。

    2) three:four 需要用双引号括起来,否则它将被解释为 field:three 匹配 query:four 示例:

    {
     "query": {
        "bool": {
          "must": [
            {
              "query_string": {
                "query": "\"three:four\"",
                "fields": [
                   "text"
                ], 
                "allow_leading_wildcard": "true",
                "default_operator": "AND"
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 2015-02-09
      • 2021-10-11
      • 2016-02-24
      相关资源
      最近更新 更多