如何自动完成并执行相同字段的包含

时间:2013-06-06 16:52:17

标签: elasticsearch

尝试使用我使用以下映射的自动完成功能

分析:filter:placename_ngram:max_gram = 15,min_gram = 2,type = edge_ngram analyzer:index:filter:lowercase,placename_ngram,tokenizer:keyword placename_search:filter:lowercase:tokenizer keyword

这适用于提前输入,但是当我试图找到像“包含”这样的值时,它不会返回记录。

如 如果我正在对“Lake”进行文本查询。

我只会

...湖 伍德湖,

但不会得到 史密斯敦湖

我将字段设置为多字段,可以使用通配符查找值,但不确定这是否有效。

我相信我可以使用NGRAM,但考虑到我只需要空格(或单词)的索引术语,这似乎有很多开销。不是每次都会。

有什么想法?

当我将两者上的标记器更改为“标准”时......它会找到这些记录......但我的自动完成程序搞砸了,并在键入Lak时带回Smithtown Lake .....(在此我不想要的情况。)

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

看看这个question where they were doing 2 different queries on the same field.

基本上你就在那里,但你需要写两个不同的查询,一个用于自动完成时间,另一个用于完整搜索时间。

您甚至描述想要在搜索期间返回“Smithtown Lake”,但在自动填充期间没有,您需要以获得不同的查询以获得不同的结果!

答案 1 :(得分:0)

我认为Shingles正是您所寻找的。你可以说它是NGram for Terms。 Checkout this.