У меня есть проблемный индекс, который имеет несколько полей, например теги (строка тегов через запятую), автор, тестер.Я создаю глобальный поиск, где проблемы могут быть найдены по всем этим полям одновременно.Я использую логический запрос, например
{
"query": {
"bool": {
"must": [{
"match": {
"author": "author_username"
}
},
{
"match": {
"tester": "tester_username"
}
},
{
"match": {
"tags": "<tag1,tag2>"
}
}
]
}
}
}
Без Analyzer Я могу получить результаты, но он использует пробел в качестве разделителя, например, Python 3 ищется как Python или 3.
Но я хотелискать Python 3 как отдельный запрос.Итак, я создал анализатор для тегов, чтобы каждый тег, разделенный запятыми, считался одним, а не стандартным пробелом.
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": ","
}
}
}
},
"mappings": {
"properties": {
"tags": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "standard"
}
}
}
}
Но сейчас я не получаю никаких результатов.Пожалуйста, дайте мне знать, что мне здесь не хватает.Я не могу найти использование анализатора в составных запросах в документации: https://www.elastic.co/guide/en/elasticsearch/reference/current/compound-queries.html
Добавление примера:
{
"query": {
"bool": {
"must": [{
"match": {
"author": "test1"
}
},
{
"match": {
"tester": "test2"
}
},
{
"match": {
"tags": "test3, abc 4"
}
}
]
}
}
}
Результаты должны совпадать со всемиполя, но для поля tags должно быть объединение тегов, и запрос должен быть разделен запятой, а не пробелом.т. е. запрос должен соответствовать test и abc 4 , но выше запроса выполняется поиск test, abc и 4.