我尝试使用Elastic Search
从文本中查找最相似的标签。
例如,我创建test_index并插入两个文档:
POST test_index/_doc/17
{
"id": 17,
"tags": ["it", "devops", "server"]
}
POST test_index/_doc/20
{
"id": 20,
"tags": ["software", "hardware"]
}
因此,我希望从“我正在使用一些软件和应用程序”文本中找到“软件”标记(文本或ID)。
我希望有人能提供一个如何做到这一点的例子,或者至少为我指明正确的方向。
- 谢谢-谢谢
2条答案
按热度按时间6jjcrrmo1#
你要找的只是一个名为
Stemming
的概念,你需要创建一个Custom Analyzer并利用Stemmer Token Filter。请查看以下Map、样本文档、查询和回复:
Map:
从评论中可以看出,您使用的是〈7的版本。为此,您可能需要在其中添加
type
。示例文档:
请求查询:
响应:
作为响应,请注意两个文档(即具有
_id 20
和21
的文档)是如何出现的。附加注解:
如果你是Elasticsearch的新手,我建议你花点时间来理解Analysis的概念,以及Elasticsearch是如何使用
Analyzers
实现同样的功能的。这将帮助您了解当您只查询
software
时,包含softwares and applications
的文档是如何返回的,反之亦然。希望这对你有帮助!
yqyhoc1h2#
如果您搜索的文本有基础或根词,
Stemming
是一个很好的方法。如果你需要从文本中找到最相似的单词,
Ngram
是更合适的方法。如果你在word of tags中搜索文本的确切单词,
Shingles
是更好的方法。