在elasticsearch中匹配带减号的字符串

ode*_*fla 5 elasticsearch

所以在数据库中我有这个条目:

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 个解决方案:

我希望这能帮到您。