这里是Elasticsearch的新手,并试图更好地理解这些查询之间的差异。据我所知,term
只匹配一个术语(匹配需要小写?),而match phrase
和query string
都匹配一个文本字符串。
发布于 2014-09-24 03:41:10
分析查询按原样匹配单个术语:值为not term
。因此,它不需要根据您索引的内容而降低大小写。
如果您在索引时提供了Bennett
,并且未分析该值,则以下查询将不会返回任何内容:
{
"query": {
"term" : { "user" : "bennett" }
}
}
如果为查询字段定义了分析器,match_phrase
query将分析输入,并找到符合以下条件的文档:
术语顺序必须出现在字段中它们必须具有与输入值相同的顺序
例如,如果为以下文档编制索引(对字段foo
使用standard
分析器):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
{ "foo":"Hello dear world" }
此match_phrase
查询将仅返回第一个和第二个文档:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
默认情况下,在同时包含多个文本字段文本的_all字段上进行query_string
查询搜索。最重要的是,它被解析并支持一些运算符( and /OR...)、通配符等(参见related syntax)。
在match_phrase
查询时,将根据在查询字段上设置的分析器来分析输入。
与match_phrase
不同,分析后获得的术语不必具有相同的顺序,除非用户在输入两边使用了引号。
例如,使用与前面相同的文档,此查询将返回所有文档:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
但此查询将返回与match_phrase
查询相同的两个文档:
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
关于这些查询的不同选项,还有更多要说的,请查看相关文档:
希望这一点足够清楚,这将有所帮助。
发布于 2017-04-10 19:09:18
我想肯定有人在寻找他们之间的差异,关于PARTIAL SEARCH,这是我对default ‘standard analyzer’的分析:
假设,我们有数据:
{ "name“:”Hello“}
现在,如果我们想要使用?进行部分搜索,该怎么办?
术语查询或匹配查询
{"term":{"name": "*ell*" }
将不起作用,则返回noting。
{"term":{"name": "*zz* *ell*" }
将不起作用,则返回noting。
结论- Term或Match根本无法执行部分搜索
通配符查询:-
{"wildcard":{"name": "*ell*" }
会给出结果{ "name“:"Hello"}
{"wildcard":{"name": "*zz* *ell*" }
将不起作用,则返回noting。
结论-通配符只能使用一个令牌执行部分搜索
Query_string :-
{"query_string": {"default_field": "name","query": "*ell*"}
会给出结果{ "name“:”Hello“}
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
会给出结果{ "name“:”Hello“}。
结论给出了- query_string能够用两个标记进行搜索
-> here标记为ell和zz
https://stackoverflow.com/questions/26001002
复制相似问题