Match_phrase 弹性搜索没有按预期工作
Match_phrase is elastic search not working as expected
在我的弹性搜索中,我有包含值“abc”和“abc-def”的“fieldname”的文档。当我使用 match_phrase 查询来搜索字段名为“abc”的文档时,它也会返回值为“abc-def”的文档。但是,当我查询“abc-def”时,它工作正常。我的查询如下:
Get my_index/_search
{
"query" : {
"match_phrase" : {"fieldname" : "abc"}
}
}
有人可以帮助我理解这个问题吗?
- match_phrase query analyzes the search term based on the analyzer provided for the field (if no analyzer is added then by default standard analyzer 已使用)。
匹配短语查询搜索字段中包含所有词条(来自搜索词条)的那些文档,并且这些词条必须以正确的顺序出现。
在你的例子中,"abc-def"
被标记化为 "abc"
和 "def"
(因为标准分析器)。现在,当您对 "abc-def"
使用匹配短语查询时,这将搜索具有相同顺序的 abc
和 def
的所有文档。 (因此您在结果中只得到 1 个文档)
当搜索 "abc"
时,这将搜索那些在 fieldname
字段中具有 abc
的文档(因为两个文档都包含 abc
, 所以结果都是 returned)
如果你想return在结果中只精确匹配文档,那么你需要改变分析术语的方式。
- 如果您没有明确定义任何映射,则需要将
.keyword
添加到 fieldname
字段。这使用关键字分析器而不是标准分析器(注意 fieldname 字段后的“.keyword”)。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例
索引数据:
{
"name":"abc-def"
}
{
"name":"abc"
}
搜索查询:
{
"query": {
"match_phrase": {
"name.keyword": "abc"
}
}
}
搜索结果:
"hits": [
{
"_index": "67394740",
"_type": "_doc",
"_id": "1",
"_score": 0.6931471,
"_source": {
"name": "abc"
}
}
]
在我的弹性搜索中,我有包含值“abc”和“abc-def”的“fieldname”的文档。当我使用 match_phrase 查询来搜索字段名为“abc”的文档时,它也会返回值为“abc-def”的文档。但是,当我查询“abc-def”时,它工作正常。我的查询如下:
Get my_index/_search
{
"query" : {
"match_phrase" : {"fieldname" : "abc"}
}
}
有人可以帮助我理解这个问题吗?
- match_phrase query analyzes the search term based on the analyzer provided for the field (if no analyzer is added then by default standard analyzer 已使用)。
匹配短语查询搜索字段中包含所有词条(来自搜索词条)的那些文档,并且这些词条必须以正确的顺序出现。
在你的例子中,
"abc-def"
被标记化为"abc"
和"def"
(因为标准分析器)。现在,当您对"abc-def"
使用匹配短语查询时,这将搜索具有相同顺序的abc
和def
的所有文档。 (因此您在结果中只得到 1 个文档)当搜索
"abc"
时,这将搜索那些在fieldname
字段中具有abc
的文档(因为两个文档都包含abc
, 所以结果都是 returned)
如果你想return在结果中只精确匹配文档,那么你需要改变分析术语的方式。
- 如果您没有明确定义任何映射,则需要将
.keyword
添加到fieldname
字段。这使用关键字分析器而不是标准分析器(注意 fieldname 字段后的“.keyword”)。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例
索引数据:
{
"name":"abc-def"
}
{
"name":"abc"
}
搜索查询:
{
"query": {
"match_phrase": {
"name.keyword": "abc"
}
}
}
搜索结果:
"hits": [
{
"_index": "67394740",
"_type": "_doc",
"_id": "1",
"_score": 0.6931471,
"_source": {
"name": "abc"
}
}
]