2012-11-15 133 views
1

我正在使用Solr來索引文檔,現在我需要搜索這些文檔中的確切短語並按照該短語出現在文檔上的次數對結果進行排序。我還必須提供短語匹配回用戶的次數。搜索和匹配Solr的短語

我用下面的查詢(這裏我用這個詞SAP搜索):

{ 
    :params => { 
      :wt => "json", 
     :indent => "on", 
      :rows => 100, 
     :start => 0, 
      :q => "((content:SAP) AND (doc_type:ClientContact) AND (environment:production))", 
      :sort => "termfreq(content,SAP) desc", 
      :fl => "id,termfreq(content,SAP)" 
    } 
} 

當然,這是對實際查詢的表示,即通過將這個散列成一個查詢字符串進行在運行時。

我設法通過使用content:"the query here"而不是content:the query here來實現搜索工作,但難度最大的部分是由termfreq返回並排序。

關於如何使這項工作的任何想法?

Obs:我正在使用Ruby,但這是一個遺留應用程序,我不能使用任何RubyGems,我在這裏使用Solr的HTTP接口。

+1

只是你應該考慮使用fq參數來處理非文本搜索字段(如doc_type和environment)。 fq參數不用於搜索的評分。 –

+0

謝謝@dwhelan,我當然會。 – kolrie

+0

您是否找到解決方案? – tasmaniski

回答

1

我能使其工作增加了ShingleFilterschema.xml

在我的情況,我開始使用黑點,所以我不得不做如下改變:

<!-- *** This fieldType is used by Sunspot! *** --> 
<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <!-- This is the line I added --> 
    <filter class="solr.ShingleFilterFactory" maxShingleSize="4" outputUnigrams="true"/> 
    </analyzer> 
</fieldType> 

後做這個改變,重新啓動Solr並重新索引,我可以在我的查詢(q=),返回字段(fl=),甚至在排序(sort=)上都使用termfreq(content, "the query here")

0

debug=results放在solr url的末尾 它會給你freq一句。