弹性搜索中的优先字段或查询
Prioretized field OR query in elasticsearch
我想知道我的问题的解决方案:
假设我的 Elasticsearch 文档中有一个 artistId 和 songId。
我想查询这样的文档:
如果可能的话,用词条查询用songId查询,但是如果没有匹配给定songId的结果,我想用artistId查询。我想在这里做的逻辑是优先查询 songId。这个分数应该高于 artistId。匹配相同的songId!如果我的查询结果中没有相同的songId,我可以用artistId重新查询。但我无法在没有 2 个查询的情况下找到解决方案。
我想只用一个查询来应用它,用 elasticsearch 查询可以吗?
我找到了多重匹配查询:
{
"multi_match" : {
"query": "songId12345",
"fields": [ "songId^3", "artistId" ]
}
}
通过此查询,我的 songId 被优先考虑,但我无法为我的查询提供相同的 bot songId 值和 artistId 值:songId12345
我的 artistId 值必须不同于 songId。也许我可以用
之类的新字段保留值
mixedField: songId - artistId
但它也不应该完全起作用。
总结:找到我相同的 songId,如果我的查询有 return 任何值,找到我有相同的 artistId 并且只用 1 个查询
有什么想法吗?谢谢你的时间。
此处的一种方法是使用 boolean
查询并使用 should
子句组合您的查询。
此外,您需要 boost
songId 子句。
查询将是这样的:
{
"query": {
"bool": {
"should": [
{
"match": {
"songId": {
"query": "song123",
"boost": 2
}
}
},
{
"match": {
"artistId": {
"query": "artist123"
}
}
}
]
}
}
}
阅读全文here
我想知道我的问题的解决方案:
假设我的 Elasticsearch 文档中有一个 artistId 和 songId。
我想查询这样的文档:
如果可能的话,用词条查询用songId查询,但是如果没有匹配给定songId的结果,我想用artistId查询。我想在这里做的逻辑是优先查询 songId。这个分数应该高于 artistId。匹配相同的songId!如果我的查询结果中没有相同的songId,我可以用artistId重新查询。但我无法在没有 2 个查询的情况下找到解决方案。
我想只用一个查询来应用它,用 elasticsearch 查询可以吗?
我找到了多重匹配查询:
{
"multi_match" : {
"query": "songId12345",
"fields": [ "songId^3", "artistId" ]
}
}
通过此查询,我的 songId 被优先考虑,但我无法为我的查询提供相同的 bot songId 值和 artistId 值:songId12345 我的 artistId 值必须不同于 songId。也许我可以用
之类的新字段保留值mixedField: songId - artistId
但它也不应该完全起作用。
总结:找到我相同的 songId,如果我的查询有 return 任何值,找到我有相同的 artistId 并且只用 1 个查询
有什么想法吗?谢谢你的时间。
此处的一种方法是使用 boolean
查询并使用 should
子句组合您的查询。
此外,您需要 boost
songId 子句。
查询将是这样的:
{
"query": {
"bool": {
"should": [
{
"match": {
"songId": {
"query": "song123",
"boost": 2
}
}
},
{
"match": {
"artistId": {
"query": "artist123"
}
}
}
]
}
}
}
阅读全文here