【问题标题】:Is there some way in fuzzy query builder to identify if any record is a perfect match?模糊查询生成器中是否有某种方法可以识别任何记录是否完​​美匹配?
【发布时间】:2023-03-29 15:22:01
【问题描述】:

我有一些模糊查询,如下所示 -

MatchQueryBuilder fuzzyQuery = QueryBuilders.matchQuery("color","blue color").fuzziness(Fuzziness.AUTO).fuzzyTranspoistions(true);

BoolQueryBuilder bool = new BoolQueryBuilder();

bool.should(fuzzyQuery);

SeachSourceBuilder search = new SearchSourceBuilder();

search.query(bool);

SearchRequest searchRequest = new SearchRequest(<index>,<type>)

searchRequest .source(search)

SearchResponse res = client.search(searchRequest,RequestOptions.DEFAULT);

'res' 从弹性搜索中返回一些记录,其中列 'color' 的值类似于字符串 'blue color'。

现在有什么方法可以确定是否有任何结果记录包含字段“color”,其确切值为“blue color”?

谢谢。

【问题讨论】:

  • 考虑使用命中分数(更高的完美匹配)
  • 感谢您的回复。是的,我已经尝试过命中分数。但据我所见,我们没有完美匹配的准确共同命中得分值。所以命中分数最高的记录是最接近的匹配记录,但不一定完全匹配。

标签: elasticsearch fuzzy-search


【解决方案1】:

我建议将完全匹配查询添加到您的模糊查询中,并使用显着的提升因子来提升完全匹配查询,以使完全匹配脱颖而出。类似的东西

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "color": {
              "query": "blue color",
              "fuzziness": "auto",
              "fuzzy_transpositions": "true"
            }
          }
        },
        {
          "term": {
            "color.keyword": {
              "value": "blue color",
              "boost": 1000
            }
          }
        }
      ]
    }
  }
}

导致这样的结果

...
"hits" : [
  {
    "_index" : "so-score",
    "_type" : "_doc",
    "_id" : "IYG5C3AB1HeSr1rnK_bY",
    "_score" : 1205.3591,
    "_source" : {
      "color" : "blue color"
    }
  },
  {
    "_index" : "so-score",
    "_type" : "_doc",
    "_id" : "IoG5C3AB1HeSr1rnPfZA",
    "_score" : 1.2476649,
    "_source" : {
      "color" : "blue bolor"
    }
  },
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2021-01-18
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多