簡體   English   中英

如何根據響應查詢elasticsearch

[英]How to query elasticsearch based on response

我試圖查詢 elasticsearch 以執行以下操作:

數據進入 Elastic

Order Number    Product Name
order1          Chicken    
order2          Banana
order3          Chicken   
order1          Cucumber   
order2          Chicken
order3          Apples
order1          Flour
order2          Rice
order3          Nuts

這是我用來獲取產品名稱的查詢

{
    "query" : {
        "match" : {
        "ProductName" : "Chicken"
}

結果:所有包含雞肉的訂單

    Order Number    Product Name
    order1          Chicken          
    order3          Chicken
    order2          Chicken

我想達到的目標:
如果上述訂單中包含雞肉,那么請給我所有與雞肉一起購買的其他產品。

Order Number    Product Name
order1          Cucumber
order2          Banana
order3          Apples
order1          Flour
order2          Rice
order3          Nuts

我如何去構建一個查詢來做到這一點? 請幫助我對elasticsearch很陌生。

  • 我是否需要運行第一個查詢獲取包含 Chicken 的所有訂單,然后提取訂單號並運行另一個查詢?

這個問題有許多不同的答案,它實際上歸結為您想用這些數據做什么,而不是您所要求的。

然而,假設您想要做的就是獲取包含特定產品的所有訂單,我建議您稍微更改索引結構。

您正在以一種非常類似於SQL 的方式索引數據。 相反,您應該考慮文檔或實體。 在我看來,“訂單”應該作為單個文檔存在。 它可能看起來像這樣:

 "order": {
        "properties": {
         "orderNumber": {
           "type": "string"
          },
          "product": {

            "properties": {
              "name": {
                "type": "string"
                }
            }
          }
       }
    }

也就是說,單個訂單是一個文檔,它可以包含多個產品。 這將允許您獲取包含“Chicken”或其他任何內容的所有訂單,但也允許您按 orderNumber 獲取所有產品的列表。

同樣,這在很大程度上取決於您打算如何使用您的數據,我要記住的主要事情是 elasticsearch 不是關系數據庫。 您必須更多地考慮如何存儲事物,因為在查詢時您無法進行復雜的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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