Solr查询搜索单个关键字的多个实例

时间:2013-12-23 15:31:19

标签: apache syntax solr lucene

我坚持这个问题。我想要做的是查询多值,并查看值是否至少出现尝试。例如,字段必须是“FREE”,“FREE”,而不仅仅是“FREE”或“FREE”,“IN_USE”。

Field 
<field name="point_statusses" type="string" indexed="true" stored="true" multiValued="true" />

Type
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

SQL
GROUP_CONCAT(cp.status) as point_statusses

澄清:

我有一个具有多个插头的对象,这些插件的状态均为FREE,IN_USE或ERROR。我想要做的是过滤那些有两个状态为FREE的插件,我不能改变schema.xml的结构。我如何查询?

1 个答案:

答案 0 :(得分:3)

不幸的是,如果不对架构应用任何更改,就无法完成,因为solr.StrField不会保留术语频率信息。

引自 schema.xml

  ...
  1.2: omitTermFreqAndPositions attribute introduced, true by default 
        except for text fields.
  ...

但是,如果您可以应用某些更改,则以下内容将起作用(在Solr 4.5.1上测试):

1)对架构进行以下更改之一:

  • 将字段更改为text_general(或任何solr.TextField字段);
<field name="point_statusses" type="text_general" indexed="true" stored="true" multiValued="true" />
  • 或者将omitTermFreqAndPositions="false"添加到point_statusses定义:
<field name="point_statusses" type="string" indexed="true" stored="true" multiValued="true" omitTermFreqAndPositions="false"/>

2)按术语频率过滤。 例子:

搜索具有2'免费'point_statusses的文档:

{!frange l=2 u=2}termfreq(point_statusses,'FREE')

或者2到3'免费'point_statusses:

{!frange l=2 u=3}termfreq(point_statusses,'FREE')

最终的solr查询可能如下所示:

http://localhost:8983/solr/stack20746538/select?q=*:*&fq={!frange l=2 u=3}termfreq(point_statusses,'FREE')