3

誰もが知っているように、wikiのSolrjのドキュメントはかなり貧弱です。CommonsHttpSolrServerを使用してインデックスをクエリできましたが、Embeddedバージョンではクエリを実行できませんでした。とにかく、今はEdgeNGramsを使用して自動提案を表示しています。インデックスに「カウント」フィールドがあるので、ユーザーが要素をクエリした回数で結果を並べ替えることができます。

私が今やりたいのは、Javaプログラムのこの「カウント」フィールドを更新できるようにすることです。これは非常に簡単なはずです。ソースコードからテストファイルを見ましたが、それは非常に複雑で、同じようなことをしようとするといつも失敗しました。たぶんSolrjを使って?

ご協力いただきありがとうございます。

編集:私のJavaコードでは、次のようになっています。

CoreContainer.Initializer initializer = new CoreContainer.Initializer();
CoreContainer coreContainer = initializer.initialize();

この時点で私が期待しているのは、coreContainerに存在するsolr.xmlで定義されているコアですが、そこにはコアがありません(ただし、defaultCoreNameはcollection1と言います)。私のsolr.xmlファイルは、dirの例と同じです。

<solr persistent="false">
  <cores adminPath="/admin/cores" defaultCoreName="collection1">
    <core name="collection1" instanceDir="." />
  </cores>
</solr>
4

2 に答える 2

2

このテスト例から変更。Solr に値を追加してから変更するには、次のようにします。

//add value to Solr
doc = new SolrInputDocument();
doc.addField("id", "A");
doc.addField("value", 10);
client.add(doc);
client.commit();

//query Solr
SolrQuery q = new SolrQuery("id:A");
QueryResponse r = client.query(q);

//update value
SolrDocument oldDoc = r.getResults().get(0);
SolrInputDocument newDoc = new SolrInputDocument();
newDoc.addField("id", oldDoc.getFieldValue("id");
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("inc", 15);
newDoc.addField("value", map);
client.add(newDoc);
client.commit();

これにより、元の 10 の値が 25 に増加します。既存のフィールドに「追加」することも、HashMap に入力するコマンドを変更して既存の値を単に「設定」することもできます。

于 2015-10-05T21:34:17.600 に答える
0

最後に、このカウントを Solr に保存し、それを取得して更新し、更新を実行します。これは、Solr の単一のフィールドとカウント フィールドを更新することはできないためです。これは非常に便利です!

于 2011-10-27T06:25:53.967 に答える