我很好奇Sphinx是否會在你添加新的SQL數據時自動更新它的索引,或者你是否需要專門告訴它重新索引你的數據庫。當您將數據添加到SQL時,Sphinx自動更新是索引嗎?
如果沒有,那麼有沒有人有一個如何在數據庫數據更改時自動執行此過程的示例?
我很好奇Sphinx是否會在你添加新的SQL數據時自動更新它的索引,或者你是否需要專門告訴它重新索引你的數據庫。當您將數據添加到SQL時,Sphinx自動更新是索引嗎?
如果沒有,那麼有沒有人有一個如何在數據庫數據更改時自動執行此過程的示例?
正如sphinx documentation part about real-time indexes
實時索引(或RT指數爲簡潔起見),發現是一個新的後端,可以讓你插入,更新或刪除在飛行文件(行)。
所以要隨時更新索引你只需要做出像
{INSERT | REPLACE} INTO index [(column, ...)]
VALUES (value, ...)
[, (...)]
查詢,以擴大對安妮的答案 - 如果你使用SQL指標,它不會自動更新。您可以在每次更改後管理重新索引的過程 - 但這可能很昂貴。解決這個問題的一個方法是擁有一切的核心索引,然後是具有相同結構的增量索引(僅索引更改)(這可以通過布爾值或時間戳列來完成)。
這樣,您就可以在超常規的基礎上重新索引delta索引(這個更小,因此速度更快),然後不太經常地處理core和delta(但仍然最好至少這樣做日常)。
但是,除此之外,新的RT指數值得關注 - 你仍然需要自己更新事物,而且它沒有綁定到數據庫,所以它是一個不同的思維模式。另外:RT索引沒有SQL索引所具有的所有功能,因此您需要確定哪些更重要。
答案是否定的,你需要告訴獅身人面像重新索引你的分貝。
有你需要知道的一些步驟和要求:
重新啓動獅身人面像服務。
提示:創建您自己的程序,可以使用C#或其他語言執行索引。你可以嘗試windows的任務時間表也可以。
這裏是我的conf:
source Main
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = table1
sql_port = 3306 # optional, default is 3306
sql_query_pre = REPLACE INTO table1.sph_counter SELECT 1, MAX(PageID) FROM table1.pages;
sql_query = \
SELECT pd.`PageID`, pd.Status from table1.pages pd
WHERE pd.PageID>=$start AND pd.PageID<=$end \
GROUP BY pd.`PageID`
sql_attr_uint = Status
sql_query_info = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id
sql_query_range = SELECT MIN(PageID),MAX(PageID)\
FROM tabl1.`pages`
sql_range_step = 1000000
}
source Delta : Main
{
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT PageID, Status from pages \
WHERE PageID>=$start AND PageID<=$end
sql_attr_uint = Status
sql_query_info = SELECT * FROM table1.`pages` pd WHERE pd.`PageID`=$id
sql_query_range = SELECT (SELECT MaxDoc FROM table1.sph_counter WHERE ID = 1) MinDoc,MAX(PageID) FROM table1.`pages`;
sql_range_step = 1000000
}
index Main
{
source = Main
path = C:/sphinx/data/Main
docinfo = extern
charset_type = utf-8
}
index Delta : Main
{
source = Delta
path = C:/sphinx/data/Delta
charset_type = utf-8
}
如果你通過了--rotate參數,你不需要重新啓動searchd。 – Christian
所以,你在哪裏運行該SQL語句一樣?我正在閱讀文檔,但他們的所有示例都顯示它正在被mysql查詢。 – lockdown
你可以通過你最喜歡的MySQL客戶端發佈 –