我有一个索引,它将某些字段存储为数组,因为它们可能有多个值,例如名字/姓氏,因为我们保留了关于婚前姓名的历史数据,昵称等等
{
"_index": "structured",
"_type": "entity",
"_id": "0000230799",
"_score": 1,
"_source": {
"FIRST_NAME": [
"Deborah",
"Debbie"
],
"LAST_NAME": [
"Loverde",
"Frogameni"
]
}
},
{
"_index": "structured",
"_type": "entity",
"_id": "0000309483",
"_score": 1,
"_source": {
"FIRST_NAME": [
"Anthony",
"Tony"
],
"LAST_NAME": "Frogameni",
},
然而,当我进行搜索时,如果某个文档在该属性上有多个值,那么它的得分会低于仅在匹配的属性上有一个值的文档
使用上面的索引,它得分第二个记录更高,因为第一个记录有两个姓氏而第二个记录是
我怎么能说如果我在一个具有多个值的字段上匹配一个值,则得分相同 作为只有一个值的字段?像我需要匹配的最大值是1
POST /structured/entity/_search?explain=true
{
"query": {
"bool":{
"should":[
{
"match_phrase_prefix":{
"FIRST_NAME":{"query":"debbi"}
}
},
{
"match_phrase_prefix":{
"LAST_NAME":"frogameni"
}
}
]
}
}
}
任何帮助非常感谢
答案 0 :(得分:1)
考虑切换到BM25-similarity model。具体来说,您希望将b
- 值设置为0
。
此外,这里是对Elasticsearch / Lucene的默认相似性模型和BM25进行更深入的比较:Similarity in Elasticsearch。
答案 1 :(得分:0)
您正在错误的位置应用最小匹配设置。您还需要将其设置为2而不是1,因此您必须匹配这两个术语。试试这个
{
"query": {
"bool": {
"should": [
{
"match_phrase_prefix": {
"FIRST_NAME": {
"query": "debbi"
}
}
},
{
"match_phrase_prefix": {
"LAST_NAME": "frogameni"
}
}
],
"minimum_should_match": 2
}
},
"from": "0",
"size": "11"
}