0

我正在使用 Elasticsearch 最新版本 5.6.4。我想索引特殊字符并在它们中搜索字段title.special。以下是我的映射:

PUT index1
    {
    "mappings": {
          "isContainer:false": {
            "properties": {
              "connectorSpecific": {
                "properties": {

              "title": {
                "type": "text",
                "store": true,
                "fields": {
                  "special":{
                     "type": "text",
                     "analyzer": "special",
                     "search_analyzer": "special"
                }
                }
              }
            }
          }
        },
        "settings": {
          "index": {
            "analysis": {
              "analyzer": {

                  "special": {
                  "filter": [
                    "lowercase"
                  ],
                  "tokenizer": "whitespace"
                }
              }

            }
            }
            }
          }
        }
      }

当我使用术语查询在 Kibana 中查询时,

GET index1/_search
{
  "query": {
    "term": {
      "title.special": {
        "value": "-unconstrained_net_use_inf_tw"
      }
    }
  }
}

没有任何回报。但是当我进行匹配搜索时,文档确实会返回。例如。

GET index1/_search
{
  "query": {
    "match": {
      "title.special": {
        "value": "-unconstrained_net_use_inf_tw"
      }
    }
  }
}

我的映射有问题吗?如何使术语查询对 *、-、+ 等特殊字符起作用。感谢任何帮助

4

1 回答 1

2

术语查询与关键字数据类型一起使用。title.special 是一个文本数据类型。要使术语查询起作用,您必须更改您的 title.special 映射 看看这里,名为“为什么术语查询与我的文档不匹配”的部分? https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

于 2017-11-14T13:43:31.743 回答