当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch:“术语”、“匹配短语”和“查询字符串”之间的区别

萧成文
2023-03-14

这里是Elasticsearch的新内容,并试图更好地理解这些查询之间的差异。据我所知,term匹配单个术语(需要小写才能有效匹配?),匹配短语Query string都匹配一个文本字符串。

共有1个答案

汪高岑
2023-03-14

term查询按原样匹配单个term:不分析值。因此,它不必根据索引的内容而被小写。

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

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

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

  • 所有术语必须出现在字段中
  • 它们的顺序必须与输入值相同
  • 不能有任何中间术语,即必须是连续的(可能不包括停顿词,但这可能很复杂)

例如,如果对以下文档进行索引(对字段foo使用标准分析器):

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

{ "foo":"Hello world" }

{ "foo":"World Hello" }

{ "foo":"Hello dear world" }

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

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

query_string默认情况下对一个_all字段进行查询搜索,该字段同时包含多个文本字段的文本。除此之外,它还被解析并支持一些运算符(和/或…)、通配符等(请参见相关语法)。

match_prace查询时,输入将根据被查询字段上设置的分析器进行分析。

match_prace不同,分析后获得的术语不必按照相同的顺序,除非用户在输入周围使用了引号。

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

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

但是该查询将返回与match_prace查询相同的2个文档:

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

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

  • 术语
  • match_prace
  • query_string

希望这足够清楚,它会有所帮助。

 类似资料:
  • 问题内容: Elasticsearch的新功能,试图更好地了解这些查询之间的区别。据我所知,匹配单个项(需要小写的比赛工作?),都和文本字符串匹配。 问题答案: 查询匹配单个术语: 不分析 值。因此,不必根据所索引的内容将其小写。 如果您是在索引时间提供的,并且未分析该值,则以下查询将不会返回任何内容: 如果为查询字段定义了分析器,则查询将分析输入,并查找符合以下条件的文档: 所有条款 必须出现在

  • 问题内容: 我有以下 匹配 查询字符串: 我想它的意思是,但实际上它能执行。 然后我尝试了 术语 查询字符串: 它执行,显示 术语 查询通过数组支持多个OR条件。 我很好奇为什么 匹配 查询不支持通过数组的 OR 条件?并且它不显示任何语法错误。 问题答案: 该查询仅支持要指定的单个字符串值。官方文档中没有明确指定它,但是如果您愿意阅读的源代码,则可以看到,在解析字段时,解析器将跳过标记来分隔数组

  • 我遇到了一个问题,elasticsearch在我的环境(舞台和生产)中返回不同的结果。 我使用的elasticsearch版本对于这两种环境是相同的。 这两个环境都具有相同的映射和索引设置。 我有一个项目索引的标题字段为“测试”。我正在尝试执行match_phrase_prefix查询。然而,在我的舞台环境中,当我搜索“te”时,结果会像预期的那样返回。在生产中,我必须将搜索查询扩展到“TES”(

  • 通过看到我的结果,我有点困惑如何在MatchPherage和match query中进行评分 对于匹配短语,我有如下查询 获得的reults如下 a。“信用-消费者测试文章”得分12.64 b的文件。“信用-X测试文章”得分12.64 c的文件。“Credit-XYZ测试文章”得分10.92 d的文档。“信用测试文章”得分10.22 e的文件。“Credit-Z测试文章”得分09.40的文档 前两

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我试图获取缺少字段“topic.description”和匹配项“fundedunder.programme”:“abc”的文档。 映射: 我的查询如下所示: