2013-12-23 62 views
4

我被困在这一个问题上。我想要做的是查询多值,并查看是否有值至少尝试。例如,该字段必须是“免费”,“免费”,而不是“免费”或“免费”,“IN_USE”。Solr查询搜索多个实例的单个关键字

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 

澄清:

我有一个具有多个插头,这些都免费,IN_USE或错误状态的对象。我想要做的是过滤有两个状态为FREE的插头,我无法更改schema.xml的结构。我如何查询这个?

+1

您可以从_schema.xml_和_solrconfig.xml_中的查询处理程序中添加'fields'和'types'吗? – cheffe

+0

完成希望你能帮忙;) – Xavier

回答

2

不幸的是,如果不对schema应用任何修改就无法完成,因为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" /> 
  • OR添加omitTermFreqAndPositions="false"到point_statusses定义:
<field name="point_statusses" type="string" indexed="true" stored="true" multiValued="true" omitTermFreqAndPositions="false"/> 

2)通过术语频率滤波器。 例子:

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

或2至3 '免费' point_statusses:

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

最后Solr的查询可能恰好具有2 '免费' point_statusses

搜索文件看起来像这样:

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

谢谢你的男人!我在这一个上打破了我的头! – Xavier