Elasticsearch如何使用通配符进行OR查询

我很难用Elasticsearch构建查询。

我想查询类似的东西:

WHERE field_1 is 'match' $string OR field_2 is 'wildcard_match' $string OR field_3 is 'fuzzy' $string

所以我试图构造的是这样的:

{

"bool" : {

"should" : [

{

"match" : { "field_1" : "testing" }

},

{

"wildcard" : { "field_2" : "*testing*" }

},

{

"fuzzy" : { "field_3" : "testing" }

}

],

"minimum_should_match" : 1,

}

}

但这似乎返回一个错误。

谁能给我一个指针,我应该如何看待用Elasticsearch进行这种OR查询?

我当前的数据已发送:

{

"_index": "twitter",

"_type": "tweet",

"_id": "1",

"_version": 1,

"found": true,

"_source": {

"field_1": "some data",

"field_2": "testing data",

"field_3": "other things"

}

}

和我的查询:

curl -XGET  'http://localhost:9200/twitter/tweet/_search' -d '

"query" : {

"bool" : {

"should" : [

{

"match" : { "field_1" : "testing" }

},

{

"wildcard" : { "field_2" : "*testing*" }

},

{

"fuzzy" : { "field_3" : "testing" }

}

],

"minimum_should_match" : 1,

}

}'

返回此错误:

SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;

shardFailures {[ZmwpcILwSEyufHf-t9xQ6g][twitter][0]:

SearchParseException[[twitter][0]: from[-1],size[-1]:

Parse Failure [Failed to parse source [

{

"query": {

"bool": {

"should": [

{

"match": {

"field_1": "testing"

}

},

{

"wildcard": {

"field_2": "*testing*"

}

},

{

"fuzzy": {

"field_3": "testing"

}

}

],

"minimum_should_match": 1,

}

}

}

]]];

nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }{[ZmwpcILwSEyufHf-t9xQ6g][twitter][1]:

SearchParseException[[twitter][1]: from[-1],size[-1]:

Parse Failure [Failed to parse source [

{

"query": {

"bool": {

"should": [

{

"match": {

"field_1": "testing"

}

},

{

"wildcard": {

"field_2": "*testing*"

}

},

{

"fuzzy": {

"field_3": "testing"

}

}

],

"minimum_should_match": 1,

}

}

}

]]];

nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }{[ZmwpcILwSEyufHf-t9xQ6g][twitter][2]:

SearchParseException[[twitter][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [

{

"query": {

"bool": {

"should": [

{

"match": {

"field_1": "testing"

}

},

{

"wildcard": {

"field_2": "*testing*"

}

},

{

"fuzzy": {

"field_3": "testing"

}

}

],

"minimum_should_match": 1,

}

}

}

]]];

nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }{[ZmwpcILwSEyufHf-t9xQ6g][twitter][3]:

SearchParseException[[twitter][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [

{

"query": {

"bool": {

"should": [

{

"match": {

"field_1": "testing"

}

},

{

"wildcard": {

"field_2": "*testing*"

}

},

{

"fuzzy": {

"field_3": "testing"

}

}

],

"minimum_should_match": 1,

}

}

}

]]];

nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }{[ZmwpcILwSEyufHf-t9xQ6g][twitter][4]:

SearchParseException[[twitter][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [

{

"query": {

"bool": {

"should": [

{

"match": {

"field_1": "testing"

}

},

{

"wildcard": {

"field_2": "*testing*"

}

},

{

"fuzzy": {

"field_3": "testing"

}

}

],

"minimum_should_match": 1,

}

}

}

]]]; nested: ElasticsearchParseException[Expected START_OBJECT but got VALUE_STRING null]; }]

回答:

这是由于JSON格式错误所致。此查询的正确JSON格式如下-

{   // --->> This was missing

"query": {

"bool": {

"should": [

{

"match": {

"field_1": "testing"

}

},

{

"wildcard": {

"field_2": "*testing*"

}

},

{

"fuzzy": {

"field_3": "testing"

}

}

],

"minimum_should_match": 1

}

}

} // --->> This was missing

以上是 Elasticsearch如何使用通配符进行OR查询 的全部内容, 来源链接: utcz.com/qa/418642.html

回到顶部