Как выполнить поиск запроса во всех полях сопоставления с помощью elasticsearch

#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"
    }
  ]
}