【发布时间】:2021-03-27 03:09:29
【问题描述】:
我有一个包含公司名称、公司缩写和公司业务描述的索引(索引架构如下)。本文档中的一个元素示例如下:
{
"abbreviation": "APPL",
"name": "Apple",
"description": "Computer software and hardware"
}
通常用户在搜索文档时会输入abbreviation。有时他们可能会错误地输入这个,而在这种情况下,elasticsearch 工作得很好。但是,大多数情况下,用户会准确输入缩写词,虽然他们会在响应的顶部获得最佳匹配,但一些低分(大于 0)的垃圾会回来。我曾尝试在查询中摆弄min_score,但由于分数波动很大,因此很难选择此参数。
有没有办法摆脱与abbreviation 字段不完全匹配但仍有模糊匹配作为备份的文档,以防完全匹配或用户搜索其他字段(例如name 和@ 987654326@) 没有找到?
这里有几个例子:
- 仅查询
AAPL会产生 3 个结果,这两个结果与查询完全匹配,因此得分相当高,但ADP仍然有些相似,但显然不是用户搜索的内容。
{
"abbreviation": "APPL",
"name": "Apple, Inc.",
"description": "Computer software and hardware"
},
{
"abbreviation": "APPL",
"name": "Apple, Inc.",
"description": "Computer software and hardware"
},
{
"abbreviation": "ADP",
"name": "Automatic Data Processing, Inc",
"description": "Computer software and hardware"
}
- 查询
Apple,我们再次获得前几条超级相关的条目,但随后出现了一些其他公司名称。
{
"abbreviation": "APPL",
"name": "Apple, Inc.",
"description": "Computer software and hardware"
},
{
"abbreviation": "APPL",
"name": "Apple, Inc.",
"description": "Computer software and hardware"
},
{
"abbreviation": "CSCO",
"name": "AppDynamics (Cisco subsidiary)",
"description": "Computer software"
}
文档的架构:
{
"settings": {
"index": {
"requests.cache.enable": true
}
},
"mappings": {
"properties": {
"abbreviation_and_name": {
"type": "text",
"boost": 2
},
"abbreviation": { "type": "text", "copy_to": "abbreviation_and_name", "boost": 20 },
"name": { "type": "text", "copy_to": "abbreviation_and_name" },
"description": { "type": "text" }
}
}
}
【问题讨论】:
-
嘿,也许您可以提供一些示例查询,您希望它们的行为如何?我想帮忙,但很难完全理解这个问题。
-
好点。添加一些示例
标签: elasticsearch elasticsearch-5 elasticsearch-dsl