【问题标题】:Search for a field which matches x % of input text with match_query使用 match_query 搜索与输入文本的 x % 匹配的字段
【发布时间】:2018-09-29 11:38:36
【问题描述】:

我正在使用match_query ElasticSearch,我遇到了标题中描述的问题。

字段名称:project.name

它的映射:

    "project": {
        "properties": {
          "name": {
            "type": "string",
            "fields": {
              "raw": {
                "type": "string",
                "index": "not_analyzed"
              }
            }
          },
          "owner": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }
  • 例如用户要搜索项目名称:the ranger 1

  • 数据库中只有project.name = the ranger

  • project.name 仅匹配 3 个术语(theranger1)中的 2 个术语(theranger

有什么方法可以搜索所有具有project.name 字段的文档至少匹配查询字符串的 60% 项?

【问题讨论】:

  • 谷歌minimum_should_match
  • 谢谢,但这不是我要找的,因为minimum_should_match 表示布尔查询中的“应该”子句的数量应该匹配。
  • 你能检查我的答案是否适合你吗? @tauitdnmd

标签: java scala elasticsearch elasticsearch-5


【解决方案1】:

TLDR:您可以在匹配查询中使用 minimum_should_match。

匹配查询是布尔类型。这意味着对提供的文本进行分析,分析过程从提供的文本构造一个布尔查询。运算符标志可以设置为orand 以控制布尔子句(默认为or)。可以使用 minimum_should_match 参数设置要匹配的可选 should 子句的最小数量。可以设置分析器来控制哪个分析器将对文本执行分析过程。它默认为字段显式映射定义,或默认搜索分析器。

{
  "query": {
    "match": {
      "project.name": {
        "query": "the ranger 1",
        "minimum_should_match": "2"
      }
    }
  }
}

您还可以指定百分比和一些条件。看这里: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多