- match_phrase查询根据为字段提供的分析器分析搜索词(如果未添加分析器,则默认使用标准分析器)。
匹配短语查询搜索在字段中包含所有术语(来自搜索术语)的那些文档,并且术语必须以正确的顺序出现。
在您的情况下,"abc-def"
被标记为"abc"
and "def"
(由于标准分析器)。现在,当您对 使用匹配短语查询时"abc-def"
,它会搜索同时具有这两者abc
且def
顺序相同的所有文档。(因此您在结果中只得到 1 个文档)
搜索 时,这将搜索该字段中的"abc"
那些文档(因为两个文档都包含,所以两者都在结果中返回)abc
fieldname
abc
如果您只想在结果中返回完全匹配的文档,那么您需要更改分析术语的方式。
- 如果您没有明确定义任何映射,那么您需要添加
.keyword
到该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"
}
}
]