所以在数据库中我有这个条目:
Mark-Whalberg
Run Code Online (Sandbox Code Playgroud)
使用术语搜索时
Mark-Whalberg
Run Code Online (Sandbox Code Playgroud)
我得到不匹配。
为什么?减号是我理解的特殊字符吗?它象征着“排除”?
查询是这样的:
{"query_string": {"query": ' Mark-Whalberg ', "default_operator": "AND"}}
搜索其他所有内容,例如:
Mark
Whalberg
hlb
Mark Whalberg
Run Code Online (Sandbox Code Playgroud)
返回匹配。
这是存储为两个不同的部分吗?在搜索词中包含减号时如何获得匹配项?
- - - - - - - 编辑 - - - - - - -
这是当前的查询:
var fields = [
"field1",
"field2",
];
{"query_string":{"query": '*Mark-Whalberg*',"default_operator": "AND","fields": fields}};
Run Code Online (Sandbox Code Playgroud)
Mic*_*ael 13
让我解释一下。当您在 ElasticSearch 中定义索引时,您没有为该字段指定任何分析器。这意味着将应用标准分析器。
根据文档:
标准分析仪
标准分析器是默认分析器,如果未指定则使用该分析器。它提供基于语法的标记化(基于 Unicode 文本分割算法,如 Unicode 标准附件 #29 中所述)并且适用于大多数语言。
另外,回答你的问题:
为什么?减号是我理解的特殊字符吗?它象征着“排除”?
对于标准分析器,是的,它是. 它并不意味着“排除”,而是一个特殊的字符,在分析后将被删除。
从文档:
为什么术语查询与我的文档不匹配?
[...] 分析文本的方法有很多种:默认的标准分析器会删除大部分标点符号,将文本分解为单个单词,然后将它们小写。例如,标准分析器会转换字符串“Quick Brown Fox!” 进入术语 [quick, brown, fox]。[...]
例子 :
如果您有以下文字:
"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
Run Code Online (Sandbox Code Playgroud)
然后标准分析器将产生:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]
Run Code Online (Sandbox Code Playgroud)
如果您不想使用分析仪,您有 2 个解决方案:
我希望这能帮到您。
| 归档时间: |
|
| 查看次数: |
9702 次 |
| 最近记录: |