我试图从突出显示中排除同义词。我用同义词过滤器创建了当前分析器的副本。因此,对于每个字段,我现在都有一个分析器和一个search_analyzer。搜索分析器是新的分析器,具有所有相同的过滤器和同义词过滤器。
有什么想法吗?我正在使用elasticsearch 5.2
映射:
"mappings": {
"doc": {
"properties": {
"body": {
"type": "text",
"analyzer": "custom_analyzer",
"search_analyzer": "custom_analyzer_with_synonyms",
"fields": {
"plain": {
"type": "text",
"analyzer": "standard"
}
}
}
}
}
搜索查询:
{
"query": {
"match": {
"body": "something"
}
},
"highlight": {
"pre_tags": "<strong>",
"post_tags": "<strong>",
"fields" : {
"body.plain" : {
"number_of_fragments": 1,
"require_field_match": false
}
}
}
}
答案 0 :(得分:1)
我不确定问题背后的原因。我认为只是在一个非同义词分析的领域上突出显示就可以了。但根据评论,它仍然突出了同义词。我可以想到两个可能的原因:(我还没有看过荧光笔源代码)
可能是因为此链接中提到的多字同义词问题:https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-word-synonyms.html现在可以修复,因为链接已经过时了。如果没有,可能会导致荧光笔看错位置偏移。
和/或者,也可能是因为未在查询中使用突出显示字段。突出显示器可能只是使用从搜索字段的分析器(包含同义词)发出的令牌,并在突出显示的字段中查找这些令牌。
如果是第一个问题,您可以尝试更改同义词以使用简单收缩。请参阅:https://www.elastic.co/guide/en/elasticsearch/guide/current/synonyms-expand-or-contract.html#synonyms-contraction但是,它对于不常见的单词的频率有其自身的问题,并且可能需要做很多工作。
修复第二种情况是使用&#34; body.plain&#34;查询中的字段,但您不能这样做,因为它会影响您的分数。在这种情况下,在非同义词字段上指定不同的荧光笔查询(以便分数不受影响)就可以了。即使第一种情况也是问题,它也有效,因为我们没有在高亮字段中使用同义词。 所以你的查询应该是这样的:
{
"query": {
"match": {
"body": "something"
}
},
"highlight": {
"pre_tags": "<strong>",
"post_tags": "<strong>",
"fields" : {
"body.plain" : {
"number_of_fragments": 1,
"highlight_query": {
"match": {"body.plain": "something"}
}
}
}
}
}