我是Elasticsearch的新手,但我成功地产生了结果,几乎达到了我的预期,除了一个小问题。我只显示关注该问题的代码。使用edgeNGram
作为过滤器:
filter: {
'type':'edgeNGram',
'max_gram':10,
'min_gram':3,
'side': 'front',
'minimum_should_match':'100%'
}
因此,结果正如预期的那样,但对于长度小于3个字符的单词,我没有得到任何结果。3个字符长给出了相当好的结果,但2个字符破坏了结果,给出了很多不相关的结果。
从本质上讲,我希望使用edgeNgram,长度为3个字符,但也搜索两个字符长的术语。
期待您的建议!
好吧,我已经在谷歌上搜索了很多天了,现在我刚刚找到了自己问题的解决方案。edgeNGram
过滤器有一个preserve_original
选项。文档显示:
(Optional, boolean) Emits original token when set to true. Defaults to false.
来源:https://www.elastic.co/guide/en/elasticsearch//reference/current/analysis-edgengram-tokenfilter.html
这似乎对我有效,现在正在获得预期的结果!希望它能帮助最终来到这里的人,这不是一个容易的发现。