弹性search:“术语”,“匹配短语”和“查询string”之间的区别

这里有新的弹性search,并试图更好地了解这些查询之间的差异。 据我所知, term匹配一个单词(匹配工作需要小写),并且match phrasequery string匹配一串文本。

term查询匹配单个词条: 不分析该值。 所以,根据你的索引,它不必小看。

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

 { "query": { "term" : { "user" : "bennett" } } } 

match_phrase查询将分析input,如果为查询字段定义分析器并查找符合以下标准的文档:

  • 所有的条款必须出现在现场
  • 它们必须与input值具有相同的顺序

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

 { "foo":"I just said hello world" } { "foo":"Hello world" } { "foo":"World Hello" } 

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

 { "query": { "match_phrase": { "foo": "Hello World" } } } 

query_string查询search,默认情况下,在一个_all字段包含几个文本字段的文本一次。 最重要的是,它被parsing并支持一些运算符(AND / OR …),通配符等(请参阅相关语法 )。

作为match_phrase查询,根据在查询字段中设置的分析器分析input。

match_phrase不同的match_phrase ,在分析之后获得的术语不必是相同的顺序,除非用户在input周围使用了引号。

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

 { "query": { "query_string": { "query": "hello World" } } } 

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

 { "query": { "query_string": { "query": "\"Hello World\"" } } } 

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

  • 术语
  • match_phrase
  • 请求参数

希望这是很清楚的,这将有所帮助。

我想有一个人肯定在他们之间寻求差异部分search这是我用默认的“标准分析仪”分析

假设,我们有数据: –

{“name”:“你好”}

现在,如果我们想用ell进行部分search呢?

术语查询或匹配查询

 {"term":{"name": "*ell*" } 

将无法正常工作,返回注意。

 {"term":{"name": "*zz* *ell*" } 

将无法正常工作,返回注意。

结论 – 术语或匹配根本无法进行部分search

通配符查询: –

 {"wildcard":{"name": "*ell*" } 

将工作结果{“名称”:“你好”)

 {"wildcard":{"name": "*zz* *ell*" } 

将无法正常工作,返回注意。

结论 – 通配符只能用一个令牌进行部分search

请求参数 :-

 {"query_string": {"default_field": "name","query": "*ell*"} 

将工作结果{“名称”:“你好”)

 {"query_string": {"default_field": "name","query": "*zz* *ell*" } 

将工作结果{“名称”:“你好”}。

结论 – query_string是能够用两个令牌search给出的

– >这里的token是ell和zz