私はSolr 5.3.1に問題があります。私のスキーマはかなりシンプルです。私は文字列としての "id"である1つのuniqueKeyを持っています。索引付けされ、格納され、必要であり、非多値です。Solrは上書きしません - 複製されたuniqueKeyエントリ
"content_type:document_unfinished"でドキュメントを追加した後、は、同じドキュメントで同じidでもう1つのcontent_type:documentを上書きします。ドキュメントはインデックス内で2回表示されます。ここでも、唯一のuniqueKeyは文字列のように "id"です。 idはもともとmysql-indexプライマリintから来ています。これがない一度だけ起こるよう
もなります。私の場合は
http://lucene.472066.n3.nabble.com/uniqueKey-not-enforced-td4015086.html
http://lucene.472066.n3.nabble.com/Duplicate-Unique-Key-td4129651.html
インデックス内のすべての文書が複製されていない、単にいくつか。最初は、インデックスに同じuniqueKeyが存在する場合にコミット時に上書きされると仮定していました。私はそれが期待どおりに動作していないようです。ドキュメント内のいくつかのフィールドを更新するだけではなく、すべての子と完全に置き換えたいと思います。
いくつかの統計情報:インデックス内の約350k文書。主にchildDocumentsを使用します。ドキュメントは、「content_type」フィールドによって区別される。私はそのようにそれらをインポートするためにSolrJを使用:
HttpSolrServer server = new HttpSolrServer(url);
server.add(a Collection<SolrInputDocument>);
server.commit();
私はいつも、もう一度、すべての子どもたちと、文書全体を追加しています。あまりにも恐ろしいものはありません。私は、同じuniqueKeyのために重複したドキュメントで終わる。サイドインジェクションはありません。私は統合された桟橋でSolrだけを走らせます。私は "手動で" Javaでluceneインデックスを開かない。
私がしたのは、+挿入をもう一度削除することでした。それはしばらくのために働くように見えたが、その後、いくつかの条件の下で開始すると、このエラーメッセージを与える:両親にマッチしていない
親クエリ利回りの文書をそれが起こる
をフィルタリングする文書があると思われます完全にランダムで、ちょうど1つのことが出現するようです:そのchildDocumentは起こります。私は特別なことはしません。基本的にウェブサイトからsolrパッケージをダウンロードして実行します。bin/solr start
誰でもアイデアはありますか?
EDIT 1
私はバグのようです、問題を見つけたと思いますか?問題を再現するには
私はSolr 5.3.1を仮想ボックスのDebianにダウンロードし、で起動しました。基本設定が適用された新しいコアが追加されました。基本設定セットで何も変更されず、単にそれをコピーしてコアを追加しました。
これはインデックス内の同じIDを持つ2つのドキュメントをもたらす:で検索
SolrClient solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1");
SolrInputDocument inputDocument = new SolrInputDocument();
inputDocument.setField("id", "1");
inputDocument.setField("content_type_s", "doc_unfinished");
solrClient.add(inputDocument);
solrClient.commit();
solrClient.close();
solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1");
inputDocument = new SolrInputDocument();
inputDocument.setField("id", "1");
inputDocument.setField("content_type_s", "doc");
SolrInputDocument childDocument = new SolrInputDocument();
childDocument.setField("id","1-1");
childDocument.setField("content_type_s", "subdoc");
inputDocument.addChildDocument(childDocument);
solrClient.add(inputDocument);
solrClient.commit();
solrClient.close();
:
http://192.168.56.102:8983/solr/test1/select?q=% 3A &重量= JSON &インデント=真
はに導きます次の出力:
{
"responseHeader": {
"status": 0,
"QTime": 0,
"params": {
"q": "*:*",
"indent": "true",
"wt": "json",
"_": "1450078098465"
}
},
"response": {
"numFound": 3,
"start": 0,
"docs": [
{
"id": "1",
"content_type_s": "doc_unfinished",
"_version_": 1520517084715417600
},
{
"id": "1-1",
"content_type_s": "subdoc"
},
{
"id": "1",
"content_type_s": "doc",
"_version_": 1520517084838101000
}
]
}
}
私は間違っていますか?
(最初から右の子のドキュメントを追加) 、それは文書の平易な更新で、それはインデックスに同じユニークキーを持つドキュメントが2回存在します。私はまた、solrClient経由で文書を明示的に削除しようとすることができると考えました。deleteById(id)。これは問題を解決するようですが、これは実際の修正ではないことを述べているので、私はまだ心配しています。 – SebastianRiemer
私は小さなJavaテストアプリケーションを記述しました。ここで見つけることができます:https://github.com/sebastianriemer/SolrDuplicateTest 私はあなたが私と同じ結果を得るかどうかを知ることに興味があります。私はsolr-userメーリングリストにも書きましたが、ここに回答を投稿します。 – SebastianRiemer
私は、Solrが別のものとは異なる子のドキュメントを扱っているところを読んでいたと思います。私はそれを読んでいた場所を思い出すことはできませんが、最初の文書からすぐにサブ文書を追加し始めました。それ以来、私は上書きしていますが、私はまだSolrのユニークなキーを扱っていない "バグ"と考えています。私は毎日数10k文書をインデックスに追加しています。 –