簡體   English   中英

elasticsearch 中的優先字段或查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM