检查solr facet查询是否大于特定日期时间值

时间:2011-11-02 10:51:41

标签: solr facet faceted-search

我在solr中有以下内容

<str name="id">2</str>
<arr name="parsed">
    <str>2011-11-01 13:40:08.0</str>
</arr>
<arr name="person">
    <str>Harsh Snehanshu | Apoorv Jain</str>
</arr>

现在,如果我想搜索jain,我只会使用此查询

http://192.168.1.135:8888/solr/MyCol/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on&facet=true&fq=person:jain

现在的问题是:我如何搜索已经过(大于)2011-11-01 13:00:00或(2011-11-01 12:30:00之间)解析的条目2011-11-01 13:30:00)??
谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

需要将已解析的字段定义为datefield

e.g。

schema.xml -

TrieDateField的字段类型应该可用 -

<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>

使用tdate字段类型映射prased字段为 -

<field name="parsed" type="tdate" indexed="true" stored="true"/>

因此,在编入索引时,响应会显示为<date name="parsed">2009-04-28T00:00:00Z</date>

这样您就可以使用date filter queries作为日期字段。

e.g。 fq=parsed:[1995-12-31T23:59:59.999Z TO 2007-03-06T00:00:00Z]

另外,对于搜索,最好使用q=person:jain 使用过滤器查询来限制文档而不是搜索。

答案 1 :(得分:0)

这些查询参数应该有效(未测试,而不是网址转义

facet.field=parsed
f.parsed.facet.range.start=2011-11-01T12:30:00Z
f.parsed.facet.range.end=2011-11-01T13:30:00Z

说明:

  • facet.field=parsed可在字段parsed中启用分面。
  • f.parsed.facet.range.start/end定义该字段的下限和上限。
  • 日期应为ISO 8601格式,但也允许使用“{1}}等日期数学”表达式。

有关详细信息,请参阅Solr documentation中的按范围构成部分。