ElasticSearch - 指定字符串字段的范围

时间:2014-12-30 15:32:22

标签: elasticsearch

我试图从名为text的字符串字段中检索1933年到1949年之间的年份。但是,我似乎无法找到工作范围查询。到目前为止我试图崩溃的事情:

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

我也尝试过这样:

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

但它仍然崩溃。

示例文本字段如下所示,其中包含对1933年的提及:

“PrimeraDivisión1933(Argentinië),seizoen in de Argentijnse voetbalcompetitie \ n *PrimeraDivisión1933(Chili),seizoen in de Chileense voetbalcompetitie \ n *PrimeraDivisión1933(Uruguay),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

完美无缺。 是否仍有可能实现我的目标?任何帮助非常感谢!

1 个答案:

答案 0 :(得分: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”或类似的东西会更好,这样您就可以将其作为数字与文本字段进行搜索。