我想在Elasticsearch中實現同義詞單向搜索。一種方式搜索的含義是,如果我定義了a => x,y,z並搜索'a',那麼搜索結果應包含所有包含單詞x,y,z,a的文檔。但是,如果我搜索'x',那麼搜索結果應該包含僅包含'x'而不包含'a'的文檔。Elasticsearch中的單向同義詞搜索
這可能在Elasticsearch?
我想在Elasticsearch中實現同義詞單向搜索。一種方式搜索的含義是,如果我定義了a => x,y,z並搜索'a',那麼搜索結果應包含所有包含單詞x,y,z,a的文檔。但是,如果我搜索'x',那麼搜索結果應該包含僅包含'x'而不包含'a'的文檔。Elasticsearch中的單向同義詞搜索
這可能在Elasticsearch?
由於您解釋的行爲是hyperonym
/hyponym
關係,因此您無法在同義詞關係中執行此操作。
雖然你可以在index-time
上實現這樣的行爲。
因此,對於a
的每一次出現,您還可以索引x,y,z
。爲此添加一個字段將是不錯的分數。
這種行爲可悲地不是彈性搜索的一部分,必須在提供數據時手工實現。
我已經反轉同義詞表達實現單向同義詞:
例如爲:
Robert => Bob, Rob
Bob => Robert
,但我不得不使用這種分析與同義詞不同的方式。 在測繪,同義詞被鉤到一個新的領域:
"FirstName": {
"type": "string",
"analyzer": "standard",
"search_analyzer": "standard",
"fields": {
"raw": {
"type": "string",
"analyzer": "standard"
},
"synonym": {
"type": "string",
"analyzer": "firstname_synonym_analyzer"
}
}
},
和搜索是這樣的:
"bool": {
"should": [
{
"match": {
"FirstName": {
"query": "Jo"
}
}
},
{
"match": {
"FirstName.synonym": {
"query": "Jo"
}
}
}
],
"minimum_should_match": 1
}
這樣,第一個字段包含正常值,第二隻是可能的同義詞。所以尋找Bob
找到Robert
,但不是Rob
。