我有这样的文件:
{
'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']
你能告诉我如何创建这个查询吗?
要达到你想要的效果,你需要使用两个必须条款,一个用于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
中的每个单词生成标记。如果您不需要任何特殊功能,可以使用标准分析仪。