首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Elasticsearch: Term,Match Phrase,Query String的区别

Elasticsearch: Term,Match Phrase,Query String的区别
EN

Stack Overflow用户
提问于 2014-09-24 01:16:27
回答 2查看 92.9K关注 0票数 139

这里是Elasticsearch的新手,并试图更好地理解这些查询之间的差异。据我所知,term只匹配一个术语(匹配需要小写?),而match phrasequery string都匹配一个文本字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 03:41:10

分析查询按原样匹配单个术语:值为not term 。因此,它不需要根据您索引的内容而降低大小写。

如果您在索引时提供了Bennett,并且未分析该值,则以下查询将不会返回任何内容:

代码语言:javascript
复制
{
  "query": {
    "term" : { "user" : "bennett" }
  }
}

如果为查询字段定义了分析器,match_phrase query将分析输入,并找到符合以下条件的文档:

术语顺序必须出现在字段中它们必须具有与输入值相同的顺序

  • 不能有任何插入的术语,即必须是连续的(可能不包括停用词,但这可以是complicated)

例如,如果为以下文档编制索引(对字段foo使用standard分析器):

代码语言:javascript
复制
{ "foo":"I just said hello world" }

{ "foo":"Hello world" }

{ "foo":"World Hello" }

{ "foo":"Hello dear world" }

match_phrase查询将仅返回第一个和第二个文档:

代码语言:javascript
复制
{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

默认情况下,在同时包含多个文本字段文本的_all字段上进行query_string查询搜索。最重要的是,它被解析并支持一些运算符( and /OR...)、通配符等(参见related syntax)。

match_phrase查询时,将根据在查询字段上设置的分析器来分析输入。

match_phrase不同,分析后获得的术语不必具有相同的顺序,除非用户在输入两边使用了引号。

例如,使用与前面相同的文档,此查询将返回所有文档:

代码语言:javascript
复制
{
  "query": {
    "query_string": {
      "query": "hello World"
    }
  }
}

但此查询将返回与match_phrase查询相同的两个文档:

代码语言:javascript
复制
{
  "query": {
    "query_string": {
      "query": "\"Hello World\""
    }
  }
}

关于这些查询的不同选项,还有更多要说的,请查看相关文档:

希望这一点足够清楚,这将有所帮助。

票数 270
EN

Stack Overflow用户

发布于 2017-04-10 19:09:18

我想肯定有人在寻找他们之间的差异,关于PARTIAL SEARCH,这是我对default ‘standard analyzer’的分析:

假设,我们有数据:

{ "name“:”Hello“}

现在,如果我们想要使用进行部分搜索,该怎么办?

术语查询或匹配查询

代码语言:javascript
复制
{"term":{"name": "*ell*" }

将不起作用,则返回noting。

代码语言:javascript
复制
{"term":{"name": "*zz* *ell*" }

将不起作用,则返回noting。

结论- Term或Match根本无法执行部分搜索

通配符查询:-

代码语言:javascript
复制
{"wildcard":{"name": "*ell*" }

会给出结果{ "name“:"Hello"}

代码语言:javascript
复制
{"wildcard":{"name": "*zz* *ell*" }

将不起作用,则返回noting。

结论-通配符只能使用一个令牌执行部分搜索

Query_string :-

代码语言:javascript
复制
{"query_string": {"default_field": "name","query": "*ell*"}

会给出结果{ "name“:”Hello“}

代码语言:javascript
复制
{"query_string": {"default_field": "name","query": "*zz* *ell*" }

会给出结果{ "name“:”Hello“}。

结论给出了- query_string能够用两个标记进行搜索

-> here标记为ell和zz

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26001002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档