2013-12-23 61 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