0

特定のフィールドを持つsolrスキーマがあります:

<field name="id" type="integer" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text" indexed="true" stored="true" multiValued="false" />
<field name="note" type="text" indexed="true" stored="true" multiValued="false" />

今、クエリで検索しています(%sは私の検索文字列です)

q={!boost b=recip(ms(NOW,date),3.16e-11,1,1)}%s&defType=dismax&qf=title^100 note

レコードごとにタグのようなものが必要です。

<field name="tags" type="string" indexed="true" stored="false" multiValued="true" />

単語の 1 つが「タグ」フィールドの値の 1 つと一致するレコードの結果を後押しするにはどうすればよいですか?

アップデート

{!boost b=recip(ms(NOW,date),3.16e-11,1,1)} を q から削除すると、クエリが希望どおりに機能することがわかりました。しかし、これではそうではありません

更新 2

さっきわかった、さっきの「わかった」は完全に間違っていた。一部の検索文字列では機能しますが、うまく機能しません。私はこの振る舞いが必要だと思います:

「タイトル」と「メモ」フィールドでは「AND」で検索する必要がありますが、「タグ」フィールドでは「OR」で検索する必要があります。どうすればdismaxでそれを行うことができますか?

{!boost} とクエリ関数を試してみましたが、良い結果は得られませんでした

4

2 に答える 2

0

これを実現するには、dismax bq(ブースト クエリ) を使用できます。ここについて読むbq: http://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29

クエリを個々の単語に分割し、それぞれを個別に使用してタグを検索する必要があります。したがって、クエリが「abc pqr」の場合、次のようになります。

q={!boost b=recip(ms(NOW,date),3.16e-11,1,1)}%s&defType=dismax&qf=title^100 note&bq=tags:abc OR tags:pqr
于 2011-06-23T09:31:55.933 に答える
0

クエリは、ウェブからコピーしたようです。

1.) 「date」というフィールドが環境に存在することを確認します。

2.) solr 出力を見てください。tomcat 内で solr を実行している場合は、catalina.out... を見てください。

...ヒット数とエラー数。

単語の 1 つが「タグ」フィールドの値の 1 つと一致するレコードの結果を後押しするにはどうすればよいですか?

そのための標高コンポーネントを見てください: http://wiki.apache.org/solr/QueryElevationComponent

于 2011-06-22T14:02:30.293 に答える