2016-10-26 30 views
1

我正在使用elasticSearch 2.2 whith索引我無法輕易更改映射,我希望根據關鍵字執行一些搜索請求。在數組字符串字段中修改ElasticSearch得分?

這裏我的字符串數組字段的映射 「關鍵詞」:

"keywords": { 
      "type": "string", 
      "norms": { 
       "enabled": false 
      }, 
      "analyzer": "analyzer_keyword" 

"analyzer_keyword": { 
       "filter": "lowercase", 
       "tokenizer": "keyword" 
      } 

我想用喜歡它BOOL請求與POST進行查詢:

{ 
    "query": 
    { 

    "bool" : { 
     "should" : 
     [ 
      { 
       "term": 
       { 
       "keywords": "foo bar", 
       } 
      }, 
      { 
       "term": 
       { 
       "keywords": "baz", 
       } 
      }, 
      { 
       "term": 
       { 
       "keywords": "qux", 
       } 
      } 
     ] 

    } 


    }, 
    "highlight": { 
    "fields" : { 
     "keywords" : {} 
    } 
    } 
} 

我希望最佳的點擊率是包含關鍵字最大值的點擊率。

  1. {ID:#x中,關鍵字:[ 「FOO欄」, 「巴茲」]}
  2. {ID:#Z

    排序得分我希望此請求命中實施例,關鍵字:[ 「FOO欄」, 「qux」]}

  3. {ID:#Y,關鍵字:[ 「qux」]}
  4. {ID:#W,關鍵字:[ 「巴茲」]}

但相反,我有這樣的結果:

  1. {ID:#x中,關鍵字:[ 「FOO欄」, 「巴茲」]}
  2. {ID:#Y,關鍵字:[ 「qux」]}
  3. {ID:#Z ,關鍵詞: 「富巴」, 「qux」]}
  4. {ID:#W,關鍵詞: 「巴茲」]}

你有一個想法,能不能幫我去管理它?

對不起,我英語不好,謝謝你的幫助。

回答

0

結果按其分數排序,這些分數取決於許多標準,包括分片中匹配項的頻率。但你不在乎,你想要爲你的條件的所有條款相同的分數,你可以使用什麼:

GET /test/test/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "constant_score": { 
      "query": { 
       "term": { 
       "keywords": "foo bar" 
       } 
      } 
      } 
     }, 
     { 
      "constant_score": { 
      "query": { 
       "term": { 
       "keywords": "qux" 
       } 
      } 
      } 
     }, 
     { 
      "constant_score": { 
      "query": { 
       "term": { 
       "keywords": "baz" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

感謝您的回答。 Boost在這種情況下不能幫助我,我想。我想按關鍵字匹配數排序。 –

+0

的確,我誤解了這個問題,並認爲你想根據查詢中標籤的偏移量進行排序,我已經編輯了我的答案。我今天對評分系統瞭解很多,謝謝:)。 – Pandawan

+0

它效果更好,但我總是有一些錯誤。我會暫時堅持這一點,並嘗試後者。 感謝您的回答! –