我正在使用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接口。
答案 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。