ElasticSearch - указать диапазон для строкового поля

Я пытаюсь извлечь упоминания о годах между 1933 и 1949 годами из текстового поля. Тем не менее, я не могу найти запрос рабочего диапазона для этого. Что я пытался до сих пор вылетает:

   {"query":
        {"query_string":
              {
                "text": [1933 TO 1949]
               }
         }
    }

Я также попробовал это так:

   {"query":
         {"filtered":
               {"query":{"match_all":{}},
                 "filter":{"range":{"text":[1933 TO 1949]}
                }
         }
    }

но все равно падает.

Пример текстового поля выглядит так, как показано ниже, и содержит упоминание о 1933 году:

"Primera División 1933 (Argentinië)", seizoen in de Argentijnse voetbalcompetitie\n* Primera Divisió n 1933 (Chili), seizoen in de Chileense voetbalcompetitie\n* Primera División 1933 (Uruguay), seizoen in de Uruguayait "voisbalite"

Тем не менее, у меня также есть документы, в которых не содержится каких-либо лет, и я хотел бы отфильтровать все документы, чтобы сохранить только те, в которых указаны годы в данном периоде. Я прочитал здесь http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html что запрос диапазона может также применяться к текстовым полям, и я не не хочу использовать какое-либо промежуточное решение для определения дат внутри текстов.

То, чего я в основном хочу достичь, - это получить те же результаты, что и при использовании поискового запроса URI:

     urltomyindex/_search?q=text:%7B1933%20TO%201949%7D%27

который работает отлично. Возможно ли еще достичь моей цели? Любая помощь высоко ценится!

1 ответ

Это должно сделать это:

GET index1/type1/_search
{
  "query": {
    "filtered": {
      "filter": {
        "terms": {
          "fieldNameHere": [
            "1933",
            "1934",
            "1935",
            "1936",
            "1937",
            "1938",
            "1939",
            "1940",
            "1941",
            "1942",
            "1943",
            "1944",
            "1945",
            "1946",
            "1947",
            "1948",
            "1949"
          ]
        }
      }
    }
  }
}

Если вы знаете, что вам часто потребуется такой поиск, было бы гораздо лучше создать новое поле yearPublished или что-то подобное, чтобы вы могли искать его как число по сравнению с текстовым полем.

Другие вопросы по тегам