技術員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

sphinx無法啟動的解決

來源:技術員聯(lián)盟┆發(fā)布時間:2019-04-01 12:04┆點擊:

  sphinx無法啟動的解決

  索引或者查詢時提示:ERROR: invalid token in 配置文件 line 1 col 1.:

  該提示表示當前的配置文件的編碼不是UTF-8(無BOM頭)格式,無法正確解析,請使用編輯軟件打開配置文件,另存為UTF-8(無BOM頭)格式;

  錯誤的編碼格式包括:Unicode、Unicode BOM、Unicode big endian、Unicode 低位在前、UTF-8 + BOM、UTF-8 Signature、UTF-8 包含簽名等;

  特別注意:Windows自帶的記事本(Notepad)或者寫字板(WordPad)無法正確保存為所需格式,請勿使用其編輯配置文件;

  在sphinx中處理使用特殊字符時所引起錯誤的辦法

  用sphinx搜索引擎時,有時會遇到一些特殊字符,這些特殊字符可能會是sphinx致命性錯誤來源:

  如 “$”、“^”,在sphinx搜索關鍵字的最前或最尾出現這樣的字符時(單獨使用也一樣),就會導致sphinx致命的錯誤。例如用“$筆記本”或“筆記本^”作為關鍵字搜索時,就會引起類似'Query failed: index product: syntax error, unexpected '"'。

  在搜索關鍵字的前面和后面自動加上半角的空格符“ ”可以解決此問題,且不會影響搜索結果。

  ERROR: index ‘product’: raw_hits: write error: 122070 of 262017 bytes written

  A:此類問題是索引寫入磁盤錯誤導致,有多個原因。注意查看磁盤空間是否已滿。另外,還可能是因為是否有多個indexer進程在進行,寫入索引失敗!還有個解決方法是:減少 indexer配置中 max_iosize的大小。max_iosize是sphinx最大允許的I/O操作大小,以字節(jié)為單位,用于I/O節(jié)流。比如可以設置為 524288(512KB)

  1、增量索引,注意刪除的問題 2、對大數據,一定要給sphinx數據目錄留出大量空間,因為臨時文件會占據非常大的空間

  Q、編譯安裝時出現這個問題….sphinx.cpp; then mv -f “.deps/sphinx.Tpo” “.deps/sphinx.Po”; else rm -f “.deps/sphinx.Tpo”; exit 1; fi In file included from sphinx.cpp:14:sphinx.h:54:19: error: mysql.h: No such file or directory….

  A:缺少libmysqlclient15.so,安裝mysql-devel.如果已經存在。請使用ldconfig加載一下這個動態(tài)鏈接庫(linux)

  Q: sphinx在rotate時出現以下問題。(searchd.log) WARNING: rotating index ‘sphinx’: prealloc: mmap() failed: Cannot allocate memory (length=431854320); using old index,同時,在索引數據目錄中會出現sphinx.spl sphinx.new.spl的情況,導致原來的索引不能正確的檢索到

  sphinx indexer有2個進程同時在運行,sphinx 的indexer不能同時使用,導致無法分配內存。并使indexer使用舊的索引文件

  先了解一下sphinx的 –rotate機制:

  indexer完成索引->發(fā)送SIGHUP 給searchd(同時在終端輸出索引已經完成)->searchd接到中斷信號->等待所有子進程退出->重命名 當前索引為舊索引為 .old

  ->重命名 .new 索引文件作為當前索引->嘗試加載當前索引文件->如果加載失敗,searchd會把.old文件回滾為當前文件,并把剛建立的新索引重命名 為 .new ->加載成的話:完成無縫銜接

  執(zhí)行 rotate開關情況下,indexer在完成索引后會首先會發(fā)送一個中斷信號給searchd(并且會輸出已經索引完成)。

  接著 searchd會做以下事情:

  1)等待所有子進程退出

  2)重命名 當前索引為舊索引為 .old

  3)重命名 .new 索引文件作為當前索引

  4)嘗試加載當前索引文件

  5)如果加載失敗,searchd會把.old文件回滾為當前文件,并把剛建立的新索引重命名為 .new

  鑒于以上情況,很可能是開啟了2個檢測目錄訪問權限的進程。用戶同時使用2個indexer且 searchd運行其下 等等

  sphinx的searchd在啟動時會創(chuàng)建一個 .spl 鎖文件,并在關閉時會刪除它。在indexer創(chuàng)建索引時如果發(fā)現有 .spl文件,則不會創(chuàng)建新索引,除非使用 –rotate

  所以,出現這樣的問題可能是 鎖文件不知咋的就丟失啦,或者重建索引時沒有使用 –rotate開關

  原文:

  ?id=274

  It seems that

  a) the lock files were lost somehow, and

  b) you ran indexer without –rotate switch.

  Normally, searchd would create .spl lock files on startup (and kill them on shutdown),

  and indexer would then refuse to reindex without –rotate switch.

  indexers sends SIGHUP to searchd when completed (and it should print that out). searchd

  then does the following:

  1) waits for all children to exit

  2) renames current index files to .old

  3) renames .new index files to current

  4) tries to load current index files

  5) if something failed, it rollbacks current files from .old and new to .new

  In your case I would start with double checking directory access rights, users which both

  indexer and searchd run under, etc.

  具體操作:

  killall searchd 然后重啟。重啟后會自動加載重命名 sphinx.new.sp*為 sphinx.sp*

  另外,出現這樣的問題時,最好注意 –rotate的使用,在應用許可 的情況下,不妨直接采用 關閉searchd 再索引,然后再開啟 searchd

  Q:關于updateAttribute更新索引的問題