Elasticsearch的新功能,试图更好地了解这些查询之间的区别。据我所知,term匹配单个项(需要小写的比赛工作?),都match phrase和query string文本字符串匹配。
term
match phrase
query string
term查询匹配单个术语: 不分析 值。因此,不必根据所索引的内容将其小写。
如果您是Bennett在索引时间提供的,并且未分析该值,则以下查询将不会返回任何内容:
Bennett
{ "query": { "term" : { "user" : "bennett" } } }
match_phrase 如果为查询字段定义了分析器,则查询将分析输入,并查找符合以下条件的文档:
match_phrase
例如,如果您索引以下文档(standard在字段中使用Analyzer foo):
standard
foo
{ "foo":"I just said hello world" } { "foo":"Hello world" } { "foo":"World Hello" }
此match_phrase查询将仅返回第一个和第二个文档:
{ "query": { "match_phrase": { "foo": "Hello World" } } }
query_string默认情况下,对_all字段进行查询搜索,该字段一次包含多个文本字段的文本。最重要的是,它被解析并支持一些运算符(AND / OR …),通配符等(请参阅相关语法)。
query_string
作为match_phrase查询,将根据在查询字段上设置的分析器来分析输入。
不同于match_phrase,除非用户在输入周围使用引号,否则分析后获得的术语不必具有相同的顺序。
例如,使用与以前相同的文档,此查询将返回所有文档:
{ "query": { "query_string": { "query": "hello World" } } }
但是此查询将返回与查询相同的2个文档match_phrase:
{ "query": { "query_string": { "query": "\"Hello World\"" } } }
关于这些查询的不同选项,还有更多要说的,请查看相关文档:
希望这足够清楚,将对您有所帮助。