【发布时间】:2020-01-08 18:09:09
【问题描述】:
我有一个使用包含部件名称的 english 分析器索引的名称字段(也尝试了标准分析器)。
我的问题是我的一些标题包含标点符号,有些则没有。此外,我的一些查询包含标点符号,而有些则没有。
例如,我的标题为“CenterG 5.2 Drive Belt for model number 4425”。我的查询可能如下所示:“Centerg 5.2 皮带”,如果是这样,那么我的结果将正确显示,顶部显示“CenterG 5.2 Drive Belt for model number 4425”。
但是,如果我的查询不包含标点符号,则该产品不会显示在结果中。对于不包含标点符号的标题和包含的查询,我也有同样的问题。我不确定这应该如何处理。我尝试使用 standard 分析器,我理解它忽略了标点符号,但这并没有改善结果。它们大致相同。
因此,当我搜索“CenterG 5.2 Belt”或“centerg 52 Belt”时,我希望产品“CenterG 5.2 Drive belt for model number 4425”显示在我的结果顶部。
这是我的映射:
{:properties=>{:name=>{:type=>"text", :analyzer=>"english"}}
我也尝试过使用 ngram 分析器,但没有解决这个问题。
这是我的查询:
{
query: {
bool: {
should:
{
multi_match:{
fields: ["name"],
query: "#{query}"
}
}
}
}
}
【问题讨论】:
-
所以你想要的只是在你的文档中保留你的标点符号,这样当查询包含它们时,只有它们应该出现在结果中,否则不是吗?在这种情况下,请加粗您期望的 O/P 您想要哪个详细示例。
-
@AmitKhandelwal 我添加了更新。谢谢
-
显示
centerg 52 belt"的结果会不会是错误的,因为标题包含5.2而不是52,这是非常不同的? -
大多数情况下是的,但我处理的数据很糟糕,所以我试图最终忽略
.。在某些情况下,某些型号可能不包含.,但查询可能也会产生奇怪的结果。我有很多型号可能更长的情况,例如PFT11473.1,我需要PFT114731来匹配。 -
7.3.感谢您的帮助。
标签: elasticsearch elasticsearch-rails