使用Solr搜索和匹配短语的计数

时间:2012-11-15 00:42:59

标签: search solr phrase

我正在使用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,我在这里使用的是HTTP接口。

2 个答案:

答案 0 :(得分:1)

我能够将 ShingleFilter 添加到我的schema.xml

在我的情况下,我开始使用SunSpot,因此我只需进行以下更改:

<!-- *** 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并重新编制索引,我可以在查询(termfreq(content, "the query here")),返回字段(q=)上使用fl=,甚至可以在排序时使用sort= ({{1}})。

答案 1 :(得分:0)

debug=results放在solr网址的末尾 它也会给你短语freq。