1 つのテーブルのデータを使用して構築された4 つのsphinxインデックスがあります。異なるドキュメントを使用することを除いて、すべてのインデックスのソース設定は同じです。mod(id, 4) = <index number>
ドキュメントとドキュメント属性をインデックス間で分散するために、このようなチェックがあります。
質問:インデックスを再構築するたびに、4 つのインデックスのうちの 1 つ (同じもの) が再構築に失敗します。他のインデックスではこの問題は発生せず、正しく再構築されます。
ドキュメントと属性テーブルを分割しました。たとえば、次のようにドキュメント テーブルが分割されます。
PARTITION BY HASH(mod(id, 4))(
PARTITION `p0` COMMENT '',
PARTITION `p1` COMMENT '',
PARTITION `p2` COMMENT '',
PARTITION `p3` COMMENT ''
);
インデクサーは、すべてのドキュメントを受信した後、属性の受信を開始する前にハングすると考えられます。これは、MySQL サーバーのセッションを確認するとわかります。
再構築に失敗したインデックスは使用中mod(id, 4) = 0
です。
Ubuntu 64 ビット 12.04.02 LTS で Sphinx 2.0.4 リリースを使用します。
データ ソース構成
source ble_job_2 : ble_job
{
sql_query = select job_notice.id as id, \
body, title, source, company, \
UNIX_TIMESTAMP(insertDate) as date, \
substring(company, 1, 1) as companyletter, \
job_notice.locationCountry as country, \
location_us_state.stateName as state, \
0 as expired, \
clusterId, \
groupCity, \
groupCityAttr, \
job_notice.cityLat as citylat, \
job_notice.cityLng as citylng, \
job_notice.zipLat as ziplat, \
job_notice.zipLng as ziplng, \
feedId, job_notice.rating as rating, \
job_notice.cityId as cityid \
from job_notice \
left join location_us_state on job_notice.locationState = location_us_state.stateCode \
where job_notice.status != 'expired' \
and mod(job_notice.id, 4) = 1
sql_attr_multi = uint attr from query; \
select noticeId, attributeId as attr from job_notice_attribute where mod(noticeId, 4) = 1
} # source ble_job_2
インデックス構成
index ble_job_2
{
type = plain
source = ble_job_2
path = /var/lib/sphinxsearch/data/ble_job_2
docinfo = extern
mlock = 0
morphology = none
stopwords = /etc/sphinxsearch/stopwords/blockwords.txt
min_word_len = 1
charset_type = utf-8
enable_star = 0
html_strip = 0
} # index_ble_job_2
どんな助けでも大歓迎です。
敬具。