1

インデックス全体を削除しても、Solr インデックスが変更されない理由を理解しようとしています。

これまでのところ、solrに直接クエリを試みました:

curl 'http://localhost:8080/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true'

私もpysolrを試しました:

In [242]: from pysolr import Solr

In [243]: conn = Solr('http://localhost:8080/solr/')

In [244]: conn.delete(q='*:*')

上記の 2 つのコマンドの出力は、catalina ログで同じです。

これをどのように試しても(管理パネルから試しても)、インデックスには同じ数のドキュメントが表示されます:

Num Docs:
323
Max Doc:
323
Version:
52
Segment Count:
1

最初は、solr/data フォルダーのアクセス許可の問題だと思っていましたが、そうではありませんでした。solrconfig.xml でキャッシュをコメントアウトしましたが、結果は同じでした。

どなたかコツがあれば助かります!


後で編集:

上記のコマンドを実行するたびに、タイムスタンプが新しいファイルのみが変更されます (スペルチェッカー dir からのみ)。これらのコマンドを手動で実行すると、ユーザーの所有権が www-data から root に変更されることもわかります。

data/index:
total 2112
-rw-r--r-- 1 www-data root 1268535 2012-08-10 13:41 _f.fdt
-rw-r--r-- 1 www-data root    2618 2012-08-10 13:41 _f.fdx
-rw-r--r-- 1 www-data root    1135 2012-08-10 13:41 _f.fnm
-rw-r--r-- 1 www-data root  201513 2012-08-10 13:41 _f_Lucene40_0.frq
-rw-r--r-- 1 www-data root  207400 2012-08-10 13:41 _f_Lucene40_0.prx
-rw-r--r-- 1 www-data root  419705 2012-08-10 13:41 _f_Lucene40_0.tim
-rw-r--r-- 1 www-data root   11199 2012-08-10 13:41 _f_Lucene40_0.tip
-rw-r--r-- 1 www-data root     245 2012-08-10 13:41 _f_nrm.cfe
-rw-r--r-- 1 www-data root    2751 2012-08-10 13:41 _f_nrm.cfs
-rw-r--r-- 1 www-data root     382 2012-08-10 13:41 _f.si
-rw-r--r-- 1 www-data root      20 2012-08-10 13:41 segments.gen
-rw-r--r-- 1 www-data root      98 2012-08-10 13:41 segments_h
-rw-r--r-- 1 root     root       0 2012-08-10 13:55 write.lock

data/spellchecker:
total 792
-rw-r--r-- 1 root root 129251 2012-08-10 14:16 _q.fdt
-rw-r--r-- 1 root root  84282 2012-08-10 14:16 _q.fdx
-rw-r--r-- 1 root root   1119 2012-08-10 14:16 _q.fnm
-rw-r--r-- 1 root root 288855 2012-08-10 14:16 _q_Lucene40_0.frq
-rw-r--r-- 1 root root 257208 2012-08-10 14:16 _q_Lucene40_0.tim
-rw-r--r-- 1 root root   9355 2012-08-10 14:16 _q_Lucene40_0.tip
-rw-r--r-- 1 root root    306 2012-08-10 14:16 _q.si
-rw-r--r-- 1 root root     69 2012-08-10 14:16 segments_1p
-rw-r--r-- 1 root root     20 2012-08-10 14:16 segments.gen

data/tlog:
total 444
-rw-r--r-- 1 www-data root 363169 2012-08-10 12:11 tlog.0000000000000000019
-rw-r--r-- 1 www-data root  79280 2012-08-10 12:11 tlog.0000000000000000020

Catalina log truncated, conn.delete(q=' : ') run - catalina.log に記録される内容は次のとおりです。

Aug 10, 2012 3:17:57 PM org.apache.solr.update.DirectUpdateHandler2 commit
INFO: start commit{flags=0,version=0,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false}
Aug 10, 2012 3:17:57 PM org.apache.solr.search.SolrIndexSearcher <init>
INFO: Opening Searcher@1d4eeb5 main
Aug 10, 2012 3:17:57 PM org.apache.solr.core.QuerySenderListener newSearcher
INFO: QuerySenderListener sending requests to Searcher@1d4eeb5 main{StandardDirectoryReader(segments_h:52 _f(4.0):C323)}
Aug 10, 2012 3:17:57 PM org.apache.solr.core.QuerySenderListener newSearcher
INFO: QuerySenderListener done.
Aug 10, 2012 3:17:57 PM org.apache.solr.handler.component.SpellCheckComponent$SpellCheckerListener buildSpellIndex
INFO: Building spell index for spell checker: default
Aug 10, 2012 3:17:57 PM org.apache.solr.update.DirectUpdateHandler2 commit
INFO: end_commit_flush
Aug 10, 2012 3:18:02 PM org.apache.solr.core.SolrCore registerSearcher
INFO: [collection1] Registered new searcher Searcher@1d4eeb5 main{StandardDirectoryReader(segments_h:52 _f(4.0):C323)}
Aug 10, 2012 3:18:02 PM org.apache.solr.update.processor.LogUpdateProcessor finish
INFO: [collection1] webapp=/solr path=/update/ params={commit=true} {deleteByQuery=*:*,commit=} 0 5608

後で後で編集:

IDで削除しようとしましたが、うまくいきました!だから何らかの理由で削除する

q=*:*

失敗します...

4

3 に答える 3

0

問題が自分の schema.xml にあることがわかりました

私はそれを書き直して、今では魔法のように動作します!

于 2012-08-10T18:16:07.193 に答える
0

これをcurlで試してみてください。過去に私のために働いていました:

curl http://localhost:8080/solr/update/?commit=true -H "Content-Type: text/xml" --data-binary '<delete><query>*:*</query></delete>'; 

それが役に立てば幸い。

于 2012-08-10T14:36:07.720 に答える
0

commit と stream.body パラメータの順序を入れ替える必要があると思います。カタリナ ログの最後のエントリを見ると、コミット値が削除クエリに含まれていないようです。

これを試して:

 curl 'http://localhost:8080/solr/update?commit=true&stream.body=<delete><query>*:*</query></delete>'
于 2012-08-10T15:39:50.630 に答える