弹性搜索:使用match_query搜索与输入文本的x%匹配的字段

时间:2018-04-19 05:05:05

标签: java scala elasticsearch elasticsearch-5

大家。

目前,我正在使用match_query ElasticSearch,我正面临着标题中描述的问题。

字段名称:img=inputimg perspective = np.eye(3,dtype=np.float32) + np.random.uniform(-0.0015,0.0015,(3,3)) perspective[2][2] = 1.2 newimg = cv2.warpPerspective(img, perspective, (img.shape[1], img.shape[0]), borderValue=(255,255,255))

其映射:

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仅匹配3个字词project.nametheranger中的2个字词theranger) )

那么有没有办法搜索所有1字段匹配至少60%查询字符串的文档。

先谢谢。

1 个答案:

答案 0 :(得分:1)

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

匹配查询的类型为boolean。这意味着分析所提供的文本,并且分析过程根据提供的文本构造布尔查询。可以将运算符标志设置为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