我想在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
。