Elasticsearch没有分析字段

时间:2016-09-13 08:18:41

标签: elasticsearch elasticsearch-2.0

我有一个分析的字段,其中包含以下内容:'quick brown foxes'和另一个包含:'quick brown fox'。

我想找到那些明显包含'狐狸'(不是狐狸)的文件。据我所知,我必须使用经过分析和未分析的子字段创建一个多字段(请参阅下面的我的映射)。但我该如何查询呢?

这是一个例子(注意我的分析仪设置为匈牙利语,但我想这不重要):

{
    "settings" : {
        "number_of_replicas": 0,
        "number_of_shards": 1,      
        "analysis" : {
            "analyzer" : {
                "hu" : {
                    "tokenizer" : "standard",
                    "filter" : [ "lowercase", "hu_HU" ]
                }
            },
            "filter" : {
                "hu_HU" : {
                    "type" : "hunspell",
                    "locale" : "hu_HU",
                    "language" : "hu_HU"
                }               
            }
        }
    },
    "mappings": {
        "foo": {
            "_source": { "enabled": true },
            "properties": {
                "text": {
                    "type": "string",
                    "analyzer": "hu",
                    "store": false,
                    "fields": {
                        "raw": {
                            "type": "string",
                            "index": "not_analyzed",
                            "store": false
                        }
                    }
                }
            }
        }
    }
}

我尝试过的查询:match,term,span_term,query_string。所有都在text和text.raw字段上执行。

1 个答案:

答案 0 :(得分:2)

"index": "not_analyzed"表示根本不会对此字段进行分析(https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index.html)。所以它甚至不会被分成单词。我相信这不是你想要的。 而不是那样,你需要添加新的分析器,它只包括标记器whitespacehttps://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-tokenizer.html):

"analyzer" : {
      "hu" : {
          "tokenizer" : "standard",
           "filter" : [ "lowercase", "hu_HU" ]
       },
       "no_filter":{
           "tokenizer" : "whitespace"
       }
}

然后你需要为你的领域使用这个新的分析器:

"raw": {
     "type": "string",
     "analyzer": "no_filter",
     "store": false
}