如何在ElasticSearch中使用常用术语查询搜索多个字段?

时间:2017-02-28 18:50:30

标签: search elasticsearch

我在多个字段上进行搜索,我想避免使用常用术语,并且我希望结合所有字段的结果。目前,我已将此(cutoff_frequencyboostbool must filters等省略,​​以使问题更加明显:)

 {
  query: {
    bool: {
      should: {
        [
          {
            common: {
              title: {
                query: q
              }
            }
          },
          {
            common: {
              description: {
                query: q
              }
            }
          }
        ]
      }
    }
  }
}

假设我有以下记录:

id: 1
title: 'Fox'
description: 'Small fox'

id: 2
title: 'Fox'
description: 'Is quick'

id: 3
title: 'Legendary'
description: 'Quick brown fox'

我的查询是The quick brown fox。在上面的解决方案中,id 1和id 2得分最高,因为它们与2 shoulds中的2个匹配。 ID为3的记录在title中不匹配,因此只有2 shoulds中的1个匹配。

正确的顺序应该是

id: 3 (matches 3 words)
id: 2 (matches 2 words)
id: 1 (matches 1 word, even tough twice)

我不想将两个字段都映射到一个字段,因为我希望在出现并列时区分它们,因此例如对于查询fox,正确的结果将是:

id: 1 (matches twice)
id: 2 (matches once but in the title)
id: 3 (matches once but in the description)

对此的任何建议都将受到高度赞赏。感谢。

0 个答案:

没有答案