3

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インターフェースを使用しています。

4

2 に答える 2

2

私の:に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=)の両方で使用できました。

于 2013-04-04T02:25:08.827 に答える
0

solr urlの最後に置くdebug=resultsと、freqというフレーズも表示されます。

于 2018-02-27T11:37:26.240 に答える