我一直在为我的一个新项目使用 ElasticSearch。我已将默认分析器设置为使用 ngram tokenfilter。这是我的 elasticsearch.yml 文件:
index:
analysis:
analyzer:
default_index:
tokenizer: standard
filter: [standard, stop, mynGram]
default_search:
tokenizer: standard
filter: [standard, stop]
filter:
mynGram:
type: nGram
min_gram: 1
max_gram: 10
我创建了一个新索引并向其中添加了以下文档:
$ curl -XPUT http://localhost:9200/test/newtype/3 -d '{"text": "one two three four five six"}'
{"ok":true,"_index":"test","_type":"newtype","_id":"3"}
但是,当我使用查询text:hree
或text:ive
任何其他部分术语进行搜索时,ElasticSearch 不会返回此文档。只有当我搜索确切的术语(如text:two
)时,它才会返回文档。
我还尝试更改配置文件,以便 default_search 也使用 ngram 令牌过滤器,但结果是相同的。我在这里做错了什么,我该如何纠正?