我有一个看起来像这样的文件:
{
"foo": {
"orgnr": "1"
},
"bar": {
"orgnr" : "2"
},
"created": "2015-02-12",
...
}
我有一个API,用户可以在其中查询:
Orgnr 必须匹配 foo.orgnr或bar.orgnr,然后可以进行大量其他字段和文本查询。我匹配这个查询字符串查询。因此,对于orgnr为1的请求,将生成以下查询字符串:
(foo.orgnr:1 OR bar.orgnr:1)AND(查询的其余部分)
其他查询可以是例如
但我不确定这实际上是正确的方法还是这样做。阅读https://www.elastic.co/guide/en/elasticsearch/guide/current/_queries_and_filters.html让我感到不安全。 我也可以使用布尔匹配,必须为orgnr。
使用角色:BAR将生成以下查询:
(bar.orgnr:1)AND(查询的其余部分)
这里最重要的是orgnr实际上与foo OR bar orgnr相匹配 或者我应该使用过滤器吗?
答案 0 :(得分:1)
bool query in filter context是一种很好的方式。 The should至少需要一个匹配的子句。
POST _search
{
"query": {
"constant_score": {
"filter": {
"bool": {
"should": [
{
"term": {
"foo.orgnr": "1"
}
},
{
"term": {
"bar.orgnr": "1"
}
}
]
}
}
}
}
}