将Elasticsearch查询中的多个子句视为不同的

时间:2018-11-14 12:08:27

标签: elasticsearch

我有一个带有以下格式的“ Should”子句的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将这些条款合并在一起,因此,即使“罐头梨”与以下两个条件中的一个完全匹配,名为“苹果罐头和梨子”的文档也比“梨罐头”的得分更高。查询字符串。有没有更好的方法来构造我的查询,以便对每个子句分别求值?

为清楚起见,我希望返回名称为“苹果和梨罐头”的文档作为上述搜索示例的一部分,但其得分应低于任何名为“苹果罐头”或“苹果罐头”的文档梨”,因为它与任何搜索子句都不完全匹配。这意味着不适当的minimum_should_match值为100%。

全面披露-我是ES的新手!

1 个答案:

答案 0 :(得分:0)

一种似乎可以实现我想要的得分结构的方法是将每个搜索词的“ 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”子句的结果得分更高。

请注意,要使其正常工作,必须首先列出“ match_phrase”子句。