我有这样的文件:
{
'body': '',
'date': '',
'agency_id': ''
}
我想获得有这些条件的文件:
正文包含:
all of ['word1', 'word2 word3', 'word4']
Or all of: ['word5 word6', 'word7']
or all of: ['word8 word9', 'word10']
And agency_id in ['id1', 'id2', 'id3']
您能告诉我如何创建此查询吗?
答案 0 :(得分:0)
要实现您的目标,您需要使用两个必须子句,一个用于body
,另一个用于agency_id
。如果是body
,您可以指定您的三个条件,并使用最小值匹配为1.应该是这样的:
{
"size" : 10,
"query" : {
"function_score" : {
"query" : {
"bool" : {
"must" : {
"bool" : {
"should" : [ {
"query_string" : {
"query" : "word1 worrd2 word3 word4",
"fields" : [ "body" ],
"default_operator" : "and"
}
}, {
"query_string" : {
"query" : "word5 worrd6 word7",
"fields" : [ "body" ],
"default_operator" : "and"
}
}, {
"query_string" : {
"query" : "word8 worrd9 word10",
"fields" : [ "body" ],
"default_operator" : "and"
}
} ],
"minimum_should_match" : "1"
}
},
"must" : {
"query": {
"terms" : { "agency_id" : [ "id1", "id2", "id3" ]}
}
}
}
}
}
}
}
请确保使用某个分析器为body
内的每个单词生成令牌。如果您不需要任何特殊功能,可以使用标准分析器。