比方說A
,B
,C
是同義詞,我想定義B
比C
elasticsearch:我可以用boost來定義同義詞嗎?
這樣,當我搜索的關鍵詞A
,在搜索結果,A
而來的第一,B
來「接近」 A
第二個和C
是最後一個。
任何幫助?
比方說A
,B
,C
是同義詞,我想定義B
比C
elasticsearch:我可以用boost來定義同義詞嗎?
這樣,當我搜索的關鍵詞A
,在搜索結果,A
而來的第一,B
來「接近」 A
第二個和C
是最後一個。
任何幫助?
沒有搜索時間機制(迄今爲止)區分同義詞和源字段的匹配。這是因爲,當編入索引時,一個字段的同義詞被放入與原始詞語相反的倒排索引中,使所有單詞保持相同。
但是,這並不是說你不能在索引時做一些魔術來收集你想要的信息。
用兩個分析器創建索引:一個帶有同義詞過濾器,另一個帶有同義詞過濾器,另一個沒有。
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,」
也可以在這裏看到:https://www.elastic.co/guide/en/elasticsearch/guide/current/most-fields.html – PhaedrusTheGreek
你有沒有解決這個問題的方法?我想這在ES中是不可能的。 –