索引中有一个字段,该字段使用Beider-Morse语音过滤器进行了分析,当我们查询该字段时,有时会得到一些非常奇怪的匹配项。
例如,如果搜索“ Heine”,则会发现“ Chatten”是语音匹配项。我相信,不管您使用哪种语言,都没有一个严肃的论点可以证明两者在语音上是相似的。
将其视为匹配项的原因似乎在于原始术语转换成的语音同义词。 “ Heine”和“ Chatten”都被转换成大约十二种语音同义词,并且只有一个重叠,一个同义词被分配给这两个同义词(同义词“ xan”)。因此,十二分之一并不是一个很好的匹配。
我没有专业知识来确定对同义词的转换是否有意义。这就是为什么我的本能是通过引入最小应该匹配子句来“解决”这个问题的原因,目的是要使单个同义词不匹配就不够。我计划尝试一些价值观,以体会到妥协的可能性。
但是我没有走那么远,因为最小应该匹配似乎不适用于语音匹配查询。
这是我的查询的样子。通常为了清楚/简单起见,我删除了其他字段的更多子查询,这就是为什么在这个简化示例中有一个嵌套的布尔查询似乎过时的原因,所以您知道:
{
"query": {
"bool": {
"filter": [
{
"term": {
"company": {
"value": "0"
}
}
},
{
"term": {
"accountNo": {
"value": "80529335"
}
}
}
],
"should": [
{
"bool": {
"should": [
{
"match": {
"address.street": {
"query": "Heinestr.",
"minimum_should_match": "3<75%"
}
}
}
],
"minimum_should_match": "1"
}
}
],
"minimum_should_match": "100%"
}
}
}
我尝试了“ minimum_should_match”的所有可能值:“ 3 <75%”,但据我所知,它似乎对结果没有任何影响。
我的期望是,当将此值设置为> 1时,单个同义词的匹配将不再足以获得匹配。
有什么想法可以实现这一目标吗?
提前谢谢!
致谢 马里奥·K。
因此,在此期间,我学到了一些东西。
minimum_should_match似乎不适用于代表原始术语的语音同义词的数量,而不适用于原始搜索术语的数量。
例如,如果我用“ minimum_should_match =“ 3 <75%”搜索“ Quick Brown Fox”,则意味着“ Quick”,“ Brown”和“ Fox”都必须在要使其成为热门的索引文档(“ 3 <75%”表示因为有3个或更少的术语,所以所有这些术语都必须匹配)。
以前,我的理解是-与NGram / Trigram分析器类似-在索引期间,三个单词“ Quick”,“ Brown”和“ Fox”将被转换为它们各自的语音同义词(可能会产生一个列表)的20-30个同义词中),而在这20-30个同义词中,有75%(因为有3个以上)需要匹配才能获得成功。
现在我意识到了这一点,我明白了为什么minimum_should_match无法按照我想要的方式工作。
但是,我仍在寻找一种影响行为的方法,即单个语音同义词的匹配足以满足匹配要求(请参见上文,我解释了为什么“海涅”与“查滕”是语音匹配而没有这个)。
我有个主意,并认为每个匹配的同义词都将有助于总分,所以当没有足够的同义词被匹配时,也许我可以使用min_score来定义截止分数。但是我没有找到一种方法来将min_score限制为语音子查询。
因此,我希望您能提出其他建议。
最好的问候
马里奥