Поскольку вы не упомянули свое сопоставление, я создал собственное сопоставление в соответствии с вашими данными и проиндексировал ваши образцы документов, и оно отлично работает.
Вы также можете проверить, как ваши данные индексируются, используя _analyze API, который поможет вам эффективно отладить проблему. Кроме того, используйте объяснение API , которое скажет вам, почему ваше предложение should не соответствует ни одному do c.
Индекс def
{
"mappings": {
"properties": {
"a": {
"type": "text"
},
"b": {
"type": "integer"
}
}
}
}
Примеры документов индекса
{
a : "status",
b : "01"
},
{
a : "status b",
b : "02"
}
Примечание: поисковый запрос также совпадает с вашим
{
"query": {
"bool": {
"must": [
{
"match": {
"a": "status b"
}
}
],
"should": [
{
"match": {
"b": "01"
}
}
]
}
}
}
И это принесите оба образца документов
"hits": [
{
"_index": "so_must_should",
"_type": "_doc",
"_id": "1",
"_score": 1.2111092,
"_source": {
"a": "status",
"b": "01"
}
},
{
"_index": "so_must_should",
"_type": "_doc",
"_id": "2",
"_score": 0.77041256,
"_source": {
"a": "status b",
"b": "02"
}
}
]
Пожалуйста, перепроверьте свое сопоставление и сравните его с этим образцом, и дайте мне знать, если у вас есть дополнительные вопросы.