请注意,我是ElasticSearch的全新手,我正处于紧张状态。我有以下查询:
{
"query": {
"filtered": {
"query": {
"match": {
"state": "VA"
}
},
"filter": {
"and": [
{
"bool": {
"must": [
{
"match": {
"status": "Active"
}
}
]
}
}
]
}
}
},
"sort": [
"dom"
],
"size": 1
}
目前,代码库仅支持搜索具有特定状态的项目。我试图修改它以支持可能的状态值列表。现在,我已经看到了可以使用should
和terms
的位置,但两者的结果都是空数据集。
我已经尝试过这样做,但我看到的例子要么不起作用,要么解释得很差(如果有的话),或者依赖于阅读和吸收文档页面(我根本就没有有时间)。如何修改顶部查询以搜索多个值?
更新
运行以下内容:
curl -XGET localhost:9200/listings/_mapping/listing/field/state?pretty
我已经获得了这种映射:
{
"listings" : {
"mappings" : {
"listing" : {
"state" : {
"full_name" : "state",
"mapping" : {
"state" : {
"type" : "string"
}
}
}
}
}
}
}
更新2
我已更新映射以将其设置为not_analyzed
并启用store
选项。数据已重新导入。新请求如下所示:
{
"query":{
"filtered":{
"filter":{
"and":[
{
"bool":{
"should":[
{
"terms":{
"state":["VA","MD"]
}
}
]
}
},{
"bool":{
"must":[
{
"match":{
"status":"Active"
}
}
]
}
}
]
}
}
},
"sort":["dom"],
"size":1
}
答案 0 :(得分:0)
您是否尝试替换“逆向工程”查询的内部“查询”?
这样的事情:
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"match": {
"state": "VA"
}
},
{
"match": {
"state": "MD"
}
}
]
}
},
"filter": {
"and": [
{
"bool": {
"must": [
{
"match": {
"status": "Active"
}
}
]
}
}
]
}
}
},
"sort": [
"dom"
],
"size": 1
}
顺便说一下,这个查询有点乱。您可以将“必须”和“应该”条款组合在一个“bool”下进行重新构造。然后,您可以丢弃“已过滤”的查询,并在根“查询”标记下立即使用单个“bool”,或者丢弃“过滤”部分的“查询”部分,并仅使用“过滤器”部分。