我有一个带有以下格式的“ 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的新手!
答案 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”子句。