所以在DB中我有这个条目:
Mark-Whalberg
使用术语
进行搜索时Mark-Whalberg
我不配。
为什么呢?减去一个我理解的特殊字符?它象征着“排除”?
查询是这样的:
{“query_string”:{“query”:' Mark-Whalberg ',“default_operator”:“AND”}}
搜索其他所有内容,例如:
Mark
Whalberg
hlb
Mark Whalberg
返回一个匹配。
这是存储为两个不同的部分吗?在搜索字词中包含减号时如何获得匹配?
-------------- EDIT --------------
这是当前的查询:
var fields = [
"field1",
"field2",
];
{"query_string":{"query": '*Mark-Whalberg*',"default_operator": "AND","fields": fields}};
答案 0 :(得分:3)
让我解释一下。在ElasticSearch中定义索引时,未指示该字段的任何分析器。这意味着它将适用Standard Analyzer。
标准分析器
标准分析仪是默认分析仪,如果没有则使用 指定。它提供基于语法的标记化(基于 Unicode文本分段算法,如Unicode标准中所指定 附件#29)适用于大多数语言。
另外,回答你的问题:
为什么呢?减去一个我理解的特殊字符?它象征着 “排除”?
对于标准分析器,是。它并不意味着“排除”,但它是一个特殊的字符,在分析后将被删除。
为什么术语查询不匹配我的文档?
[...]分析文本的方法有很多种:默认标准 分析器丢弃大多数标点符号,将文本分解为单个单词, 小写他们。例如,标准分析仪会转向 字符串“Quick Brown Fox!”中的术语[quick,brown,fox]。 [...]
示例:
如果您有以下文字:
"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
然后标准分析仪将产生:
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]
如果您不想使用分析仪,则可以使用2种解决方案:
我希望这会对你有所帮助。
答案 1 :(得分:0)
我遇到了同样的问题,@ Mickael的答案非常适合理解正在发生的事情(我真的建议您阅读链接的文档)。
我通过为查询定义operator
来解决此问题:
GET http://localhost:9200/creative/_search
{
"query": {
"match": {
"keyword_id": {
"query": "fake-keyword-uuid-3",
"operator": "AND"
}
}
}
}
为更好地理解此查询使用的算法,请尝试添加"explain": true
并分析结果:
GET http://localhost:9200/creative/_search
{
"explain": true,
"query": // ...
}