我正在尝试设置一个现有/自定义分析器,以便使用缩写进行搜索。例如,如果文本字段为“美国银行”,则搜索BOfA或BOA、BOA等应与此记录匹配。我怎么能那样做呢?
vxf3dgd41#
您可能可以将synonym filter标记用于自定义分析器。例如,以下Map
{ "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "standard", "filter": ["lowercase", "synonym_filter"] } }, "filter": { "synonym_filter": { "type": "synonym", "synonyms": [ "bank of america,boa" ], "expand": true } } } }, "mappings": { "document": { "properties": { "text": { "type": "text", "analyzer": "my_analyzer", "fielddata": true } } } }
}当然,您可以添加更多的列表或使用同义词文件。对于查询用例BOfA或BOA,BofA -可以使用两种方法。1)与这些可能组合的更多同义词
"synonyms": [ "bank of america,boa" "bank of america,bofa" ]
2)或者保持省略号不变并使用模糊查询
{ "query": { "match": { "text" : { "query": "bofa", "fuzziness": 2 } } } }
您将需要同义词来为ES提供缩写。
nnvyjq4y2#
我使用pattern_replace找到了一些方法:
GET /_analyze { "tokenizer": "keyword", "filter": [ { "type": "pattern_replace", "pattern": "(\\B.)", "replacement": "" }, { "type": "pattern_replace", "pattern": "(\\s)", "replacement": "" }, "uppercase", { "type": "ngram", "min_gram": 3, "max_gram": 5 } ], "text": "foxes jump lazy dogs" }
其产生:
{ "tokens": [ { "token": "FJL", "start_offset": 0, "end_offset": 20, "type": "word", "position": 0 }, { "token": "FJLD", "start_offset": 0, "end_offset": 20, "type": "word", "position": 0 }, { "token": "JLD", "start_offset": 0, "end_offset": 20, "type": "word", "position": 0 } ] }
2条答案
按热度按时间vxf3dgd41#
您可能可以将synonym filter标记用于自定义分析器。
例如,以下Map
}
当然,您可以添加更多的列表或使用同义词文件。
对于查询用例BOfA或BOA,BofA -可以使用两种方法。
1)与这些可能组合的更多同义词
2)或者保持省略号不变并使用模糊查询
您将需要同义词来为ES提供缩写。
nnvyjq4y2#
我使用pattern_replace找到了一些方法:
其产生: