我已经编写了一些代码(java / spring),该代码允许用户选择复选框,然后构建一个ElasticSearch查询。到目前为止,此方法一直运行良好,因为要求不同类别中的术语应为AND查询,因此可以遍历分层选择框以构建术语匹配(或查询),然后将它们组合并构建一个布尔词条查询
{
"bool" : {
"must" : [ {
"terms" : {
"field1" : [ "term1", "term2" ]
}
}, {
"terms" : {
"field2" : [ "term3" ]
}
} ]
}
Run Code Online (Sandbox Code Playgroud)
提出了一些顶级框或查询的新要求,因此在这些情况下,我将需要一些类似于
{
"query": {
"bool" : {
"must" : {
"terms" : { "field1" : ["term1"] , "field1" : ["term2"] }
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
我认为这是不可能的(elasticSearch 2.4.1),因为出现错误
"type": "query_parsing_exception",
"reason": "[terms] query does not support multiple fields",...
Run Code Online (Sandbox Code Playgroud)
我猜我应该将其移至过滤器查询,但我想知道是否有人可以确认这是最简单,最有效的更改(在此阶段,我正在寻找更改最少的路径)?
试试这个:-
{
"query": {
"bool": {
"must": [{
"term": {
"field1": "1"
}
},
{
"term": {
"field12": "1"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案是在第一个查询中简单地使用a should而不是a must:
{
"bool" : {
"should" : [ { <---- change this
"terms" : {
"field1" : [ "term1", "term2" ]
}
}, {
"terms" : {
"field2" : [ "term3" ]
}
} ]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4884 次 |
| 最近记录: |