2013-06-27 62 views
4

比方說ABC是同義詞,我想定義BCelasticsearch:我可以用boost來定義同義詞嗎?

這樣,當我搜索的關鍵詞A,在搜索結果,A而來的第一,B來「接近」 A第二個和C是最後一個。

任何幫助?

+0

你有沒有解決這個問題的方法?我想這在ES中是不可能的。 –

回答

6

沒有搜索時間機制(迄今爲止)區分同義詞和源字段的匹配。這是因爲,當編入索引時,一個字段的同義詞被放入與原始詞語相反的倒排索引中,使所有單詞保持相同。

但是,這並不是說你不能在索引時做一些魔術來收集你想要的信息。

用兩個分析器創建索引:一個帶有同義詞過濾器,另一個帶有同義詞過濾器,另一個沒有。

PUT /synonym_test/ 
{ 
settings : { 
    analysis : { 
    analyzer : { 
     "no_synonyms" : { 
     tokenizer : "lowercase" 
     }, 
     "synonyms" : { 
     tokenizer : "lowercase", 
     filter : ["synonym"] 
     } 
    }, 
    filter : { 
     synonym : { 
     type : "synonym", 
     format: "wordnet", 
     synonyms_path: "prolog/wn_s.pl" 
     } 
     } 
    } 
    } 
} 

使用多字段映射,使得感興趣的領域是索引兩次:

PUT /synonym_test/mytype/_mapping 
{ 
    "properties":{ 
    "mood": { 
     "type": "multi_field", 
     "fields" : { 
      "syn" : {"type" : "string", "analyzer" : "synonyms"}, 
      "no_syn" : {"type" : "string", "analyzer" : "no_synonyms"} 
     } 
    } 
    } 

} 

指數測試文檔:

POST /synonym_test/mytype/1 
{ 
    mood:"elated" 
} 

在搜索時間,提高的分數在沒有同義詞的場上擊球。

GET /synonym_test/mytype/_search 
{ 
    query: { 
    bool: { 
     should: [ 
      { match: { "mood.syn" : { query: "gleeful", "boost": 3 } } }, 
      { match: { "mood.no_syn" : "gleeful" } } 
     ] 
    } 
    } 

} 

結果_score 「:0.2696457

搜索原來的長期回報更好的成績:

GET /synonym_test/mytype/_search 
{ 
    query: { 
    bool: { 
     should: [ 
      { match: { "mood.syn" : { query: "elated", "boost": 3 } } }, 
      { match: { "mood.no_syn" : "elated" } } 
     ] 
    } 
    } 

} 

結果:_score」:0.6558018,」

+0

也可以在這裏看到:https://www.elastic.co/guide/en/elasticsearch/guide/current/most-fields.html – PhaedrusTheGreek

相關問題