1

Solr のインデックス付きレコードに、次のサンプル レコード (JSON など) があるとします。

{
    "title":"Innovation Life and Strategy",
    "author":"Sarah Howard",
},
{
    "title":"Simple Life", <--- This will be ignored
    "author":"W. David",
},
{
    "title":"Today's Innovations",
    "author":"Michael Wayne", <--- This Author will be listed at the top
},
{
    "title":"The Innovation Records",
    "author":"Tommy Wright",
},
etc ..

Solr クエリを作成して次のことを行う方法:

  • フィールドでフィルター処理さinnovationれます(つまり、3 つのレコードが得られます)title
  • 次に、author:を一番上に配置して結果を並べ替えます。Wayne

したがって、最終結果は次のようになります。

{
    "title":"Today's Innovations",
    "author":"Michael Wayne",
},
{
    "title":"Innovation Life and Strategy",
    "author":"Sarah Howard",
},
{
    "title":"The Innovation Records",
    "author":"Tommy Chen",
},

最初のステップにしかfq=title:*Innovation*

たどり着けませんが、2 番目のステップ (カスタムソート) のクエリがわかりません。
どうすれば入手できますか?

4

2 に答える 2

4

並べ替えの代わりにフィールド ブースティングを使用できます。詳細については、http://wiki.apache.org/solr/SolrRelevancyFAQをご覧ください。

おそらく次のようなものが必要です。

q=title:*&bq=author:Wayne^10&fq=title:*Innovation*

これにより、タイトルに「Innovation」が含まれるすべてのドキュメントが生成され、「Wayne」に一致するドキュメントのスコアが高くなります。

「作成者」が (KeywordTokenizer ではなく) WhitespaceTokenizer を使用して索引付けされていることを確認してください。そうしないと、分離された単語を使用して検索できなくなります ( http://wiki.apache.org/solr/AnalyzersTokenizersTokenFiltersを参照)。

于 2012-08-10T10:01:26.923 に答える
0

この場合、作成者は複数の値のフィールドであり、名と名前の2つの値があるため、それは不可能だと思います。したがって、名前で注文する場合は、このフィールドを2つのフィールドに分割する必要があります:author_first_name、author_surname

たとえば、データインポートハンドラーを使用して、インデックス作成時に名前を分割できます。

もう1つの解決策は、Javaで独自の並べ替えアルゴリズムを作成することです。

Docotor Tommy Chen重要なのは(すべての場合で)、またはのようにすべての名前が2つの名前だけで構成されているわけではないため、確実な名前が何であるかを見つけることkim jong ilです。

これが本当の問題だと思います。

于 2012-08-10T08:56:14.730 に答える