【问题标题】:Treat multiple clauses in Elasticsearch query as distinct将 Elasticsearch 查询中的多个子句视为不同的
【发布时间】:2018-11-14 20:53:32
【问题描述】:

我有一个 Elasticsearch 查询,其中包含以下格式的“应该”子句。目的是通过单个请求搜索多个查询字符串:

[ 
    { match: { "name": { query: "Candied Apples" } } },
    { match: { "name": { query: "Canned Pears" } } } 
]

根据https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-query-strings.html ES 正在组合这些子句,因此名为“罐装苹果和梨”的文档的得分高于“罐装梨”,即使“罐装梨”与其中一个查询完全匹配字符串。有没有更好的方法来构造我的查询,以便单独评估每个子句?

明确地说,我希望在上面的搜索示例中返回一个名为“Canned Apples and Pears”的文档,但它的分数应该低于任何名为“Candied Apples”或“Canned”的文档梨”,因为它不完全匹配任何搜索子句。这意味着 100% 的 minimum_should_match 值不合适。

全面披露 - 我是 ES 新手!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    似乎可以实现我正在寻找的评分结构的一种方法是将每个搜索词的“match_phrase”和“match”组合到一个查询中,例如:

    [ 
        {match_phrase: { 'name': { query: 'Candied Apples' } } },
        {match_phrase: { 'name': { query: 'Canned Pears' } } },
        {match: { 'name': { query: 'Candied Apples' } } },
        {match: { 'name': { query: 'Canned Pears' } } } 
    ]
    

    这意味着返回所有完整和部分匹配,但任何成功的词组匹配的分数都将高于“匹配”子句的结果。

    请注意,要使其生效,必须首先列出“match_phrase”子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多