2015-12-17 87 views
3

我想在Elasticsearch中實現同義詞單向搜索。一種方式搜索的含義是,如果我定義了a => x,y,z並搜索'a',那麼搜索結果應包含所有包含單詞x,y,z,a的文檔。但是,如果我搜索'x',那麼搜索結果應該包含僅包含'x'而不包含'a'的文檔。Elasticsearch中的單向同義詞搜索

這可能在Elasticsearch?

回答

3

由於您解釋的行爲是hyperonym/hyponym關係,因此您無法在同義詞關係中執行此操作。

雖然你可以在index-time上實現這樣的行爲。

因此,對於a的每一次出現,您還可以索引x,y,z。爲此添加一個字段將是不錯的分數。

這種行爲可悲地不是彈性搜索的一部分,必須在提供數據時手工實現。

0

我已經反轉同義詞表達實現單向同義詞:

例如爲:

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