【发布时间】:2022-01-18 03:17:16
【问题描述】:
我想根据我的索引中的tokens(而不是完整的文档)创建搜索建议。
例如: 我有一个简单的 movies 索引,其中包含以下两个文档:
{"name":"Captain America"}{"name":"American Made"}
如果我输入 "ame" 那么我应该得到两个建议(作为标记)
americaamerican
同样,如果我输入 "cap" 那么我应该得到 "captain" 而不是 "Captain America"
我和这篇文章有完全相同的问题: 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
但它依赖于在每个文档中明确添加所有建议。这似乎是一种乏味的方法。
如果能以更好的方式实现,请告诉我。
提前致谢。
【问题讨论】:
-
当你搜索 cap 时它不会返回像 America 这样的部分......因为它存储为“Captain America”......你需要将它存储为唯一的 Captain......在你的如果您字段名称的值为“美国队长”...如果您正在为其应用文本字段类型...它可能会为您创建令牌,例如美国队长等...创建这些令牌是为了帮助您搜索...并作为搜索原始文本的响应返回
标签: elasticsearch solr elastic-stack opensearch