2

にいくつかのドキュメントがありSolr 4.0ます。最も関連性の高いレコードを最初に表示し、次に関連性の低いレコードを表示したいと思います。

たとえば、次のようなタイトルのドキュメントが3つあります-

  1. 所得分配政策に向けて
  2. 所得分配と経済政策
  3. 発展途上国における所得分配政策

今、私が次のようなものをクエリするとq=title:Income Distribution Policy

ドキュメント番号3を最初に表示したい(最初の3つの単語は完全に一致するため)、次にドキュメント番号1を2番目に表示したい(残りの一致の「Towards」を除く)、次にドキュメント番号2を表示したい表示されます(間にいくつかの単語があるため)。

schema.xmlはこのように見えます-

<types>
  <fieldType name="search" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="German2" />
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SnowballPorterFilterFactory" language="German2" />
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
</types>

<fields>
   <field name="title" type="search" indexed="true" stored="true"/>
</fields>

EDIT1デバッグ出力

"rawquerystring": "title:Income Distribution Policy",
"querystring": "title:Income Distribution Policy",
"parsedquery": "title:incom title:distribut title:polici",
"parsedquery_toString": "title:incom title:distribut title:polici"

編集2fieldTypeを変更しました

次の組み合わせを使用しましたが、出力は同じです。

  1. StandardTokenizerFactory-autoGeneratePhraseQueries(存在しません)-PorterStemFilterFactory。
  2. StandardTokenizerFactory-autoGeneratePhraseQueries="true"-PorterStemFilterFactory。
  3. StandardTokenizerFactory-autoGeneratePhraseQueries(存在しません)。
  4. StandardTokenizerFactory-autoGeneratePhraseQueries="true"。
  5. WhitespaceTokenizerFactory-autoGeneratePhraseQueries(存在しません)-PorterStemFilterFactory。
  6. WhitespaceTokenizerFactory-autoGeneratePhraseQueries="true"-PorterStemFilterFactory。
  7. WhitespaceTokenizerFactory-autoGeneratePhraseQueries(存在しません)。
  8. WhitespaceTokenizerFactory-autoGeneratePhraseQueries="true"。
4

2 に答える 2

2

他でソートしない場合は、類似性/関連性でソートしています。そのため、正しい順序で結果が得られない場合は、重みの割り当て方法と使用しているクエリ パーサーを調整する必要がある場合があります。

タイトル フィールドをブーストして eDismax を使用していると思います。さらに、ブースティング用のmm (最小一致) とpf (フレーズ フィールド) を参照してください。

fieldType に autoGeneratePhraseQueries フィールドを設定してテストすることもできます。

もちろん、クエリでdebugQuery=trueを使用すると、何が起こっているかを確認できます。また、 debug.explain.structured=trueを追加すると、デバッグ出力を読み取ろうとする最初の数回に役立つ場合があります。

于 2013-01-28T14:42:21.090 に答える
1

""クエリ文字列を試してみましたが、うまくいきました。

のように - q=title:"Income Distribution Policy" OR title:Income Distribution Policy

これにより、ドキュメント 1、ドキュメント 3、ドキュメント 2 という出力が得られました。完全ではありませんが、十分に近いものです。

于 2013-02-11T00:23:57.240 に答える