Web サイトのインデックスを作成するために、Ruby スクリプトを使用して、ドキュメント ルート内のすべてのファイルを Solr にアップロードするシェル スクリプトを生成します。シェル スクリプトには、次のような多くの行があります。
curl -s \
"http://localhost:8983/solr/update/extract?literal.id=/about/core-team/&commit=false" \
-F "myfile=@/extra/www/docroot/about/core-team/index.html"
...そして次で終わります:
curl -s http://localhost:8983/solr/update --data-binary \
'<commit/>' -H 'Content-type:text/xml; charset=utf-8'
これにより、ドキュメント ルート内のすべてのドキュメントが Solr にアップロードされます。tika と ExtractingRequestHandlerを使用して、ドキュメントをさまざまな形式 (主に PDF と HTML) で Solr にアップロードします。
このシェル スクリプトを生成するスクリプトでは、id フィールド (a/k/a url) が特定の正規表現に一致するかどうかに基づいて、特定のドキュメントをブーストしたいと考えています。
これらがブースティング ルール (疑似コード) であるとしましょう。
boost = 2 if url =~ /cool/
boost = 3 if url =~ /verycool/
# otherwise we do not specify a boost
そのインデックス時間ブーストを http リクエストに追加する最も簡単な方法は何ですか?
私は試した:
curl -s \
"http://localhost:8983/solr/update/extract?literal.id=/verycool/core-team/&commit=false" \
-F "myfile=@/extra/www/docroot/verycool/core-team/index.html" \
-F boost=3
と:
curl -s \
"http://localhost:8983/solr/update/extract?literal.id=/verycool/core-team/&commit=false" \
-F "myfile=@/extra/www/docroot/verycool/core-team/index.html" \
-F boost.id=3
どちらも検索結果の順序に違いはありませんでした。私が望むのは、ユーザーが何を検索したかに関係なく、ブーストされた結果が検索結果の最初に表示されることです (もちろん、ドキュメントにクエリが含まれている場合)。
XML 形式で POST する場合、ドキュメント全体または特定のフィールドのブースト値を指定できることを理解しています。しかし、そうするとドキュメントの内容としてファイルを指定する方法がわかりません。実際、tika ページには部分的な例が示されています。
curl "http://localhost:8983/solr/update/extract?literal.id=doc5&defaultField=text" \
--data-binary @tutorial.html -H 'Content-type:text/html'
しかし、ここでもブーストを指定する場所/方法が明確ではありません。私は試した:
curl \
"http://localhost:8983/solr/update/extract?literal.id=mydocid&defaultField=text&boost=3"\
--data-binary @mydoc.html -H 'Content-type:text/html'
と
curl \
"http://localhost:8983/solr/update/extract?literal.id=mydocid&defaultField=text&boost.id=3"\
--data-binary @mydoc.html -H 'Content-type:text/html'
どちらも検索結果を変更しませんでした。
ドキュメントのコンテンツを変更せずにドキュメントのブースト属性のみを更新する方法はありますか (特定のフィールドではありません)。もしそうなら、私は2つのステップで私の目標を達成することができます.