针对TrieDoubleField的Solr范围查询意外地表现为负值?

时间:2012-06-08 15:16:01

标签: solr search-engine range

我搜索了所有的溢出/交换网站,并在谷歌上花了几个小时无济于事,所以我希望有人是Solr的天才,可以告诉我哪里出错了。

我们正处于先前搜索服务器和Solr之间的过渡期,这要求我们暂时将我们的地理数据存储在不同的纬度和经度字段中。我已根据众多来源的建议使用solr.TrieDoubleField定义了字段。

<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
<field name="latitude_1" type="tdouble" indexed="true" stored="false" multiValued="false" required="false" />
<field name="longitude_1" type="tdouble" indexed="true" stored="false" multiValued="false" required="false" />

我遇到的问题是针对经度值(主要小于零)的范围查询根本不起作用。奇怪的是,如果我将查询值作为正数输入,则范围有效,但这并不会激发信心。

以下是一个示例查询:

longitude_1:[-95 TO -94]

这不会返回任何结果。但是,如果我用正数查询,如下:

longitude_1:[94 TO 95]

我得到了这些结果(为简洁起见,我使用了fl=longitude_1):

<doc>
  <str name="longitude_1">-94.60046</str>
</doc>
<doc>
  <str name="longitude_1">-94.03403</str>
</doc>
<doc>
  <str name="longitude_1">-94.03403</str>
</doc>

我注意到这些值显示在<str>标记中,但我假设这是内部TrieDoubleField的字符串输出表示。如果不是这种情况,我的架构或Solr配置中可能还有其他错误。

1 个答案:

答案 0 :(得分:0)

减号可能被解释为查询运算符(意​​味着该子句被禁止)。你应该试着escape(用反斜杠)。