У меня есть данные в базе данных mysql, которые были сохранены в эластичном поиске как документы, использующие задание logstash.
**Data example in database:**
firstname(text), lastname(text), email(text), tags(text & nullable)
Здесь теги получают значение согласно этому в mysql: "t1, t2, t3" или""
При добавлении данных вasticsearch пользовательский анализатор / токенизатор был применен с использованием ", (запятая)".
Мне нужны данные согласно этому и нужно написать запрос для этого:
firstname = "text", tags = ["t1","t2"]
"Get all records which contain this firstname and tags with either "t1 or t2 or (t1 & t2) or null" (any in which tags are empty)".
Я пробовал несколько запросов, чтобы получить такой результат, но ничего не получалось.(Он не возвращает записи с нулевыми тегами, а также с тегами (t1, t2))
GET /posts/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "some_text",
"fields": [
"firstname^1.0"
]
}
},
{
"bool": {
"should": [
{
"terms": {
"tags": [
"t2"
]
}
}
]
}
}
]
}
},
{
"bool": {
"must": [
{
"multi_match": {
"query": "some_text",
"fields": [
"firstname^1.0"
]
}
},
{
"bool": {
"should": [
{
"terms": {
"tags": [
""
]
}
}
]
}
}
]
}
}
]
}
}
}
GET /posts/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "some_text",
"fields": [
"firstname^1.0"
]
}
},
{
"bool": {
"should": [
{
"terms": {
"tags": [
"t2"
]
}
}
]
}
}
]
}
},
{
"bool": {
"must": [
{
"multi_match": {
"query": "some_text",
"fields": [
"firstname^1.0"
]
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "tags"
}
}
}
}
]
}
}
]
}
}
}