2015-12-13 132 views
0

我有一個爲Elasticsearch構建的大人物索引(1.7.3)Elasticsearch過濾器得分?

我試圖搜索人物信息(幾千萬)。人的性別(即'M'或'F')是人物文檔中許多字段之一。

當我使用匹配查詢進行搜索時,它需要時間(我猜它必須整理大量的發佈列表?),因爲可能有至少一百萬個性別。這是一個有效的觀察?

我正在做一個匹配查詢,因爲我想得分。

{ 
    "explain": true, 
    "from": 0, 
    "size": 10, 
    "query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "Gender": { 
        "query": "F", 
        "boost": 10.0 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

我明白,過濾器非常快,更適合這個(也緩存)。有沒有什麼辦法可以把它包裝在一個過濾器中,並說出它是否匹配,然後給它一個固定的10分(例如)?

或者我可以堅持與匹配查詢和探索內?任何幫助/指針將不勝感激。

回答

0

你可能要考慮function score

而且我覺得你應該你gender字段映射爲not_analyzed,然後你的查詢會是這個樣子

GET your_index/your_type/_search 
{ 
    "query": { 
    "function_score": { 
     "query": { 
     "match_all": {} 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "term": { 
       "Gender": "F" 
      } 
      }, 
      "weight": 10 
     } 
     ], 
     "score_mode": "multiply" 
    } 
    } 
} 

這將boost文件與性別F

這有幫助嗎?