elasticsearch - Elasticsearch Suggest+同义词+模糊性
问题描述
我正在寻找一种方法来实现具有同义词和模糊性的自动建议
例如,当用户尝试搜索“replce ar”时,我的同义词列表中有 ar => audio record
因此,结果应包括匹配更改音频记录替换音频记录等的项目,
在这里我们需要模糊,因为“替换”(在用户的搜索文本中)有一个错字匹配 ar => 音频记录的同义词 使用正则表达式模式自动建议。
是否可以在一个字段中实现所有三个功能?
编辑: 正则表达式+模糊只会引发错误。我还没有很好地解释我对正则表达式模式的需求。所以,我需要一个正则表达式来进行部分单词查找('encyclopedic' 包含'cyclo')。
现在,在调查了我为此目的有哪些选择之后,将我引导到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"
]
}
}
}
}
概念字段映射(分析器 + 映射参考)
(请注意,分析器与上面定义的分析器的名称匹配)
{
"properties": {
"suggestion": {
"type": "text",
"analyzer": "synonyms"
}
}
}
名义查询
{
"query": {
"match": {
"suggestion": {
"query": "replce ar",
"fuzziness": "auto",
"operator": "and"
}
}
}
}
请记住,建议有几个不同的选项,因此根据您使用的选项,您可能需要调整字段的映射方式,甚至向分析器添加另一个标记过滤器。但是分析器只是由一系列标记过滤器组成,因此您通常可以组合实现目标所需的任何标记过滤器。只需确保您了解每个过滤器的作用,以便以正确的顺序获取过滤器。
如果您在此过程的一部分中遇到困难,只需提交另一个关于您遇到的特定问题的问题。祝你好运!
推荐阅读
- android - 需要帮助了解 Expo 中的音频
- python - 如何从 .bat 运行 python 代码(而不是 python 脚本)
- sql - 如何使用 GROUP BY 修改 SQL SELECT 请求
- flutter - 某些字符未正确加载
- open-policy-agent - OPA HTTP 自引用 PUT 请求超时
- google-sheets - 我可以将富文本添加到谷歌表格注释吗?
- reactjs - 基于标记的中心和缩放地图
- swift - CoreImage:CIImage 写入 JPG 正在变换颜色 [macOS]
- sql - 带日期的 MySQL SUMIFS
- ruby - Cheezy 页面对象中的可重用组件