2014-12-30 4 views
1

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

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

Я также попытался это следующим образом:

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

, но он по-прежнему падает.

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

«Примера Дивизион 1933 (Argentinië), Seizoen в де Argentijnse voetbalcompetitie \ п * Чемпионат Андорры по футболу п 1933 (Чили), seizoen in de Chileense voetbalcompetitie \ n * Primera División 1933 (Уругвай), seizoen in de Uruguayaanse voetbalcompetitie \ n \ n "

Однако у меня также есть документы, не содержащие лет внутри, и я хотел бы отфильтровать все документы чтобы сохранить только те, которые упоминают годы в определенный период. Я читаю здесь 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 

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

+0

Можете ли вы вставить образец документа? Я не понимаю природу текстового поля. –

+0

Да, я только что редактировал вопрос. – Crista23

+1

Вы не можете выполнить поиск таким образом. Прежде чем вы вставляете документ, вам нужно идентифицировать и проанализировать год как 1933 год и поместить его в качестве отдельного поля с номером, называемого yearOfRelevance. После этого вы можете сделать запрос диапазона в этом поле –

ответ

0

Это следует сделать это:

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

Смежные вопросы