Я думаю, вам нужно использовать must
, потому что вы хотите документы, которые соответствуют двум ключам. Например:
Я создал эти mapping
и documents
, чтобы показать вам, как вы можете извлекать только те документы, которые удовлетворяют совпадению, двумя ключами, которые вы используете для поиска.
PUT so_test7
{
"mappings":{
"_doc": {
"properties":{
"book_author":{"type": "keyword"},
"book_name": {"type":"text"}
}
}
}
}
Образцы документов
POST /so_test7/_doc/1
{
"book_author": "mike jones",
"book_name": "I like this"
}
POST /so_test7/_doc/2
{
"book_author": "some random",
"book_name": "I like that"
}
POST /so_test7/_doc/3
{
"book_author": "new one",
"book_name": "nope"
}
POST /so_test7/_doc/4
{
"book_author": "mike jones",
"book_name": "not matching"
}
и вот мой запрос
GET /so_test7/_search
{
"query":{
"bool":{
"must":[{
"match":{"book_author":"mike jones"}
},
{
"match":{"book_name":"I like.*"}
}
]
}
}
}
и вот ответ
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.8630463,
"hits" : [
{
"_index" : "so_test7",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.8630463,
"_source" : {
"book_author" : "mike jones",
"book_name" : "I like this"
}
}
]
}
}