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 или что-то подобное, чтобы вы могли искать его как число по сравнению с текстовым полем.