shm*_*man 5 fuzzy-search elasticsearch search-suggestion type-synonyms
我正在寻找一种方法来实现具有同义词和模糊性的自动建议
例如,当用户尝试搜索“replce ar”时,我的同义词列表有 ar => audio record
因此,结果应包括匹配更改音频记录替换音频记录等的项目,
在这里我们需要模糊性,因为“替换”(在用户的搜索文本中)有一个拼写错误 匹配 ar => 音频记录自动建议与正则表达式模式的同义词。
是否可以在单个字段中实现所有三个功能?
编辑: 正则表达式+模糊只是抛出错误。我还没有很好地解释我需要一个正则表达式模式。所以,我需要一个正则表达式来进行部分单词查找(“百科全书”包含“环”)。
现在,在调查了我为此目的有哪些选择后,将我引导至NGram Tokenizer并查看其他建议者,我发现也许Phrase 建议者正是我正在寻找的,所以我会尝试并告诉你关于。
是的,您可以使用同义词和模糊性作为建议。通过在语言分析器中添加同义词过滤器并将该过滤器添加到分析器来处理同义词。然后,当您为要用于建议的字段创建字段映射时,您可以将该分析器分配给该字段。
至于模糊性,这发生在查询时。大多数基于文本的查询都支持一个fuzziness
选项,允许您指定要允许的更正次数。默认auto
值会根据期限的长短来调整更正的次数,因此这通常是最好的。
概念分析设置(synonym_graph 参考)
{
"analysis": {
"filter": {
"synonyms": {
"type": "synonym_graph",
"expand": "false",
"synonyms": [
"ar => audio record"
]
}
},
"analyzer": {
"synonyms": {
"tokenizer": "standard",
"type": "custom",
"filter": [
"standard",
"lowercase",
"synonyms"
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
概念字段映射(分析器+映射参考)
(注意分析器与上面定义的分析器的名称相匹配)
{
"properties": {
"suggestion": {
"type": "text",
"analyzer": "synonyms"
}
}
}
Run Code Online (Sandbox Code Playgroud)
概念查询
{
"query": {
"match": {
"suggestion": {
"query": "replce ar",
"fuzziness": "auto",
"operator": "and"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,建议有多个不同的选项,因此根据您使用的选项,您可能需要调整字段的映射方式,甚至向分析器添加另一个标记过滤器。但分析器只是由一系列令牌过滤器组成,因此您通常可以组合实现目标所需的任何令牌过滤器。只需确保您了解每个过滤器的作用,以便按正确的顺序获得过滤器。
如果您在此过程中遇到困难,只需针对您遇到的具体问题提交另一个问题即可。祝你好运!
归档时间: |
|
查看次数: |
1245 次 |
最近记录: |