2017-05-10 65 views
0

的交集假設我的文檔都是這樣Elasticsearch:陣列

{ 
    "salary": { 
     "max": 1572, 
     "min": 682 
    }, 
    "skills": [ 
     "Modula-3", 
     "Max/MSP", 
     "Arduino", 
     "SPARK", 
     "PL/SQL", 
     "Processing", 
     "Go", 
     "Mathematica", 
     "Modula-2", 
     "IDL", 
     "Heron", 
     "Scheme" 
    ], 
    "company": "Merck", 
    "experience": 0, 
    "role": "Airport Security Screener", 
    "cities": [ 
     "Ahmedabad", 
     "Mangaluru", 
     "Malegaon", 
     "Bokaro Steel City", 
     "Vadodara", 
     "Kollam" 
    ] 
} 

我想要做一個查詢中,我將提供一組城市,並會得到根據路口的基數排序的文件。即假設我的城市集合是["Ahmedabad", "Mangaluru"],那麼這個查詢與上述文檔的交集的cardinatlity是2.我應該怎麼查詢?

樣品響應

{"_score": 4.0202227, "cities": ["Ahmedabad","Mangaluru","Visakhapatnam", "Vijayawada"]} 
{"_score": 2.27, "cities": ["Ahmedabad","Visakhapatnam", "Vijayawada"]} 
{"_score": 1.79, "cities": ["Mangalauru","Vijayawada", "delhi", "bombay"]} 

我使用elasticsearch 5.2.2

+0

您能否提供樣本輸出? – Richa

+0

@Richa更新了樣本回復 –

回答

0

也許這樣的事情會幫助你?

{ 
    "query": { 
    "function_score": { 
     "query": { 
     "match": { 
      "cities": "Ahmedabad Mangaluru" 
     } 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "match": { 
       "cities": "Ahmedabad" 
      } 
      }, 
      "weight": 1 
     }, 
     { 
      "filter": { 
      "match": { 
       "cities": "Mangaluru" 
      } 
      }, 
      "weight": 1 
     } 
     ], 
     "score_mode": "sum" 
    } 
    } 
} 
+0

如果城市數量未預先定義,該怎麼辦?即我的查詢中可以有不同數量的城市? –

+0

您需要爲每個城市設置一個「過濾器」部分。 –

+0

我可以有一個查詢,我不需要爲每個城市都有一個過濾器部分?爲什麼或者爲什麼不 ? –