【问题标题】:ElasticSearch to fuzzy search all fields, boost exact matches, and boost other various match conditionsElasticSearch 对所有字段进行模糊搜索,提升精确匹配,并提升其他各种匹配条件
【发布时间】:2014-03-11 19:32:56
【问题描述】:

鉴于以下查询,我如何将每个 should 子句的排名高于另一个。

我正在尝试按照它们列出的顺序来提升它们。

{ “大小”:20, “询问”: { “布尔”:{ “应该”: [ { “匹配短语”:{ “全名”:“迈克尔·道格拉斯” } }, { “match_phrase_prefix”:{ “全名”:“迈克尔·道格拉斯” } }, { “匹配”: { “姓氏”:“迈克尔·道格拉斯” } }, { “匹配”: { “名字”:“迈克尔·道格拉斯” } }, { “fuzzy_like_this”:{ “like_text”:“迈克尔·道格拉斯” } } ] } } }

如何提升 should 数组中的每个子句?这是我无法解决的问题。

【问题讨论】:

  • 我对查询进行了编辑,并在最后将问题改写为更直接。我试图获取样本数据,但编辑所有个人信息阻碍了返回的样本模糊结果的有用性。示例:我只是想让第二个应该,即 fullName 上的完全匹配,排名高于 fullName 短语前缀。如果我能做到这一点,我应该能够完成剩下的。
  • 为什么需要?如果您只是使用“Michael Douglas”进行常规查询字符串查询,Elasticsearch 默认会将精确短语匹配的排名高于单个字段匹配,并且高于模糊匹配。
  • 一个例子是每次都将 LastName 结果放在首位。
  • Kielni 我在stackoverflow.com/questions/24528933/… 有一个问题,默认情况下,在使用模糊匹配时,完全匹配不会排在首位。

标签: c# elasticsearch nest


【解决方案1】:

如果您有非常具体的提升需求,您可以将每个查询包装在 function_score 查询中:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

custom_boost_factor Elasticsearch 1.0 之前的版本

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-custom-boost-factor-query.html

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多