[英]Prioretized field OR query in elasticsearch
我想知道我的問題的解決方案:
假設我的 Elasticsearch 文檔中有一個 artistId 和 songId。
我想查詢這樣的文件:
如果可能,使用 term 查詢使用 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,如果我的查詢確實返回任何值,請使用相同的 artistId 找到我並使用恰好 1 個查詢執行此操作
任何的想法? 謝謝你的時間。
這里的一種方法是使用boolean
查詢並使用should
子句組合您的查詢。
此外,您需要boost
songId子句。 查詢將 go 是這樣的:
{
"query": {
"bool": {
"should": [
{
"match": {
"songId": {
"query": "song123",
"boost": 2
}
}
},
{
"match": {
"artistId": {
"query": "artist123"
}
}
}
]
}
}
}
在這里閱讀全文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.