term
查询按原样匹配单个术语:值为未分析。
因此,它不必根据您索引的内容而变为小写。
如果您提供Bennett
在索引时并且未分析该值,以下查询将不会返回任何内容:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
如果为查询字段定义了分析器,则查询将分析输入并查找符合以下条件的文档:
-
所有条款必须出现在字段中
- 他们必须拥有相同的订单作为输入值
- 不得有任何中间项,即连续的(可能排除停用词,但这可能很复杂)
例如,如果您索引以下文档(使用standard
现场分析仪foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
{ "foo":"Hello dear world" }
This match_phrase
查询将仅返回第一个和第二个文档:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
查询搜索,默认情况下,在_all一次包含多个文本字段的文本的字段。最重要的是,它被解析并支持一些运算符(AND/OR...)、通配符等(请参阅相关语法).
As the match_phrase
查询时,根据查询字段上设置的分析器对输入进行分析。
不像match_phrase
,分析后获得的术语不必采用相同的顺序,除非用户在输入周围使用了引号。
例如,使用与之前相同的文档,此查询将返回所有文档:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
但是这个查询将返回与以下相同的 2 个文档match_phrase
query :
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
关于这些查询的不同选项还有很多要说的,请查看相关文档:
希望这足够清楚并且会有所帮助。