似乎如果我通过 ngram 过滤器运行一个单词或短语,则原始单词不会被索引。相反,我只得到不超过我的 max_gram 值的单词块。我希望原始单词也能被索引。我正在使用 Elasticsearch 0.20.5。如果我使用带有 ngram 的过滤器设置索引,如下所示:
CURL -XPUT 'http://localhost:9200/test/' -d '{
"settings": {
"analysis": {
"filter": {
"my_ngram": {
"max_gram": 10,
"min_gram": 1,
"type": "nGram"
},
"my_stemmer": {
"type": "stemmer",
"name": "english"
}
},
"analyzer": {
"default_index": {
"filter": [
"standard",
"lowercase",
"asciifolding",
"my_ngram",
"my_stemmer"
],
"type": "custom",
"tokenizer": "standard"
},
"default_search": {
"filter": [
"standard",
"lowercase"
],
"type": "custom",
"tokenizer": "standard"
}
}
}
}
}'
然后我在文档中放了一个长字:
CURL -XPUT 'http://localhost:9200/test/item/1' -d '{
"foo" : "REALLY_REALLY_LONG_WORD"
}'
我查询那个长词:
CURL -XGET 'http://localhost:9200/test/item/_search' -d '{
"query":
{
"match" : {
"foo" : "REALLY_REALLY_LONG_WORD"
}
}
}'
我得到 0 个结果。如果我查询该单词的 10 个字符块,我会得到一个结果。当我运行这个:
curl -XGET 'localhost:9200/test/_analyze?text=REALLY_REALLY_LONG_WORD
我得到了很多克,但不是原来的词。我是否缺少使这项工作按我想要的方式进行的配置?