ElasticSearch自动完成/按令牌建议 [英] ElasticSearch autocomplete/suggest by token
本文介绍了ElasticSearch自动完成/按令牌建议的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要基于我的索引中存在的标记(而不是完整文档)创建搜索建议。
例如: 我有一个简单的电影索引,其中包含以下两个文档:
{"name":"Captain America"}
{"name":"American Made"}
如果我键入名称,我应该会得到两个建议(作为令牌)
america
american
同样,如果我键入&Cap,则我应该得到&q;船长&,而不是&q;美国队长
我遇到了与此帖子完全相同的问题: https://discuss.elastic.co/t/elasticsearch-autocomplete-suggest-by-token/18392
我已经检查了所有类型的建议器,他们似乎专注于返回整个文档,而不是令牌。
Apache Solr通过其自动建议功能满足此要求:
例如,如果我键入"kni
",则Solr将返回knives
、knife
和knit
作为建议(基于来自索引文档的标记)
{
"responseHeader":{
"status":0,
"QTime":19},
"spellcheck":{
"suggestions":[
"kni",{
"numFound":3,
"startOffset":0,
"endOffset":3,
"suggestion":["knives",
"knife",
"knit"]}],
"collations":[
"collation","knives"]}}
此StackOverflow线程中提到了一种可能的解决方案: Elasticsearch autocomplete or autosuggest by token但它依赖于显式地添加每个文档中的所有建议。这似乎是一种乏味的方法。
请让我知道是否可以以更好的方式实现这一点。
提前谢谢。
推荐答案
搜索时不会像美国那样返回部件,因为它存储为美国队长。您将获得存储的原始文本
您只需要将其存储为美国。
在您的情况下,该字段名具有值&美国队长&。 如果您要为其应用文本字段类型,它可能会为您创建令牌,如船长、美国等。
这些令牌是在索引时创建的,创建这些令牌是为了帮助您进行搜索/自动建议。
作为搜索或自动建议的响应,您将获得原始文本。
尽管另一种方法是从自动建议的原始文本的响应中突出显示匹配的术语或部分术语。
这篇关于ElasticSearch自动完成/按令牌建议的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文