#elasticsearch
Вопрос:
Я использую elasticsearch в своем приложении react и хочу знать правильный способ или формат поиска слова(запроса) во всех полях
это мой запрос на получение
{
"query": {
"bool": {
"must": [
{
"match": {
"category": {
"query": "الأنظمة",
"operator": "and"
}
}
}
],
"filter": [
{
"range": {
"date": {
"gte": "1970-01-01",
"lt": "2400-01-01"
}
}
}
]
}
},
"size": "1000",
"sort": [
{
"date": "desc"
}
]
}
Ответ №1:
На самом деле поведение ElasticSearch по умолчанию заключается в том, чтобы делать то, что вы пытаетесь сделать, но вы добавили сложности, которые не были необходимы.
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
DSL запроса хорошо документирован, и существует множество вариантов выполнения такого поиска.
Запрос с несколькими совпадениями-это то, что вы ищете
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html
Эта версия будет выполнять поиск всего по нескольким полям.
{
"query": {
"bool": {
"must": [{
"multi_match": {
"query": "الأنظمة",
"fields": [field1, field2]
}
}],
"filter": [
{"range": {"date": {"gte": "1970-01-01", "lt": "2400-01-01" } } }
]
}
},
"size": "1000",
"sort": [{ "date": "desc" }]
}
Если вы хотите сопоставить все поля, опустите параметр поля. Однако это число ограничено 1024 полями.
{
"query": {
"bool": {
"must": [{
"multi_match": { "query": "الأنظمة" }
}],
"filter": [
{"range": {"date": {"gte": "1970-01-01", "lt": "2400-01-01" } } }
]
}
},
"size": "1000",
"sort": [{ "date": "desc" }]
}
Ответ №2:
Я решаю эту проблему с помощью
строка запроса
:
{
"query": {
"bool": {
"filter": [
{
"range": {
"date": {
"gte": "1970-01-01",
"lt": "2400-01-01"
}
}
}
],
"must": [
{
"query_string": {
"query": "نظام"
}
}
]
}
},
"size": "1000",
"sort": [
{
"date": "desc"
}
]
}