2015-12-17 88 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