3

だから、私はこれを読み始めたところです.PHPで検索を実装したことはありません. 私が疑問に思っていたいくつかの質問があります:

  • 物事の音によると、Sphinx が動作するには、バックグラウンドで実行されるプログラムである「デーモン」が必要ですか?
  • たとえば、mySQL テーブルのインデックスを作成した後、ユーザーが別のレコードをアップロードしたとします。検索でこのレコードを表示するには、ユーザーがレコードを更新/作成するたびに、インデックスを何度も作成する必要がありますか?

ありがとう。

4

3 に答える 3

5

基本的に、ベース インデックスとデルタ インデックスが必要です。デルタはベース内のすべてを更新します。したがって、ベース インデックスを午前 1 時に実行し、5 分ごとにデルタを更新することができます。タイムスタンプをテーブルまたは別のデータベースに保存し、それによってどのレコードをデルタに入れるかを制御します。

次に、sql_query_killlist を見て、削除されたものを削除できます。ドキュメントを参照してください。

conf の例は次のようになります。

source _user
{
    type = mysql
    sql_host = localhost
    sql_user = root
    sql_pass =
    sql_db = db
    sql_port = 3306
    sql_attr_uint = category_id
    sql_attr_timestamp = time_posted
}

source user_base : _user
{
    sql_query_pre = REPLACE INTO sphinx_lastrun (object_name, object_value) SELECT 'users', @max_stamp:=UNIX_TIMESTAMP(MAX(stamp))-1 FROM users
    sql_query = SELECT id, category_id, name, UNIX_TIMESTAMP(stamp) AS stamp FROM users WHERE stamp < FROM_UNIXTIME(@max_stamp)
    sql_query_info = SELECT id FROM users WHERE id=$id  
}

source user_incr : _user
{
    sql_query = SELECT id, category_id, name, UNIX_TIMESTAMP(stamp) AS stamp FROM users WHERE stamp >= (SELECT FROM_UNIXTIME(object_value) FROM sphinx_lastrun WHERE object_name = 'users')

    # You'll need sql_query_killlist to get rid of stuff that is deleted. See the docs

    sql_query_info = SELECT id FROM users WHERE id=$id      
}

index _user
{
    docinfo = extern
    mlock = 0
    morphology = none
    min_word_len = 2
    charset_type = sbcs
    min_prefix_len = 3
    enable_star = 1
}

index user_base : _user
{
    source = user_base
    path = /opt/sphinx/var/data/user_base
}

index user_incr : _user
{
    source = user_incr
    path = /opt/sphinx/var/data/user_incr
}

index user
{
    type = distributed
    local = user_base
    local = user_incr
}

searchd
{
    listen = 3312
    log = /opt/sphinx/var/log/searchd/searchd.log
    query_log = /opt/sphinx/var/log/searchd/query.log
    pid_file = /opt/sphinx/var/log/searchd/searchd.pid
}
于 2009-09-16T12:53:16.433 に答える
1

最初の質問に答えるには: はい Sphinx には、バックグラウンドで実行され、指示があれば検索を実行するデーモンが付属しています。

于 2009-10-07T13:16:50.870 に答える
0

インクリメンタルインデックススキームを使用できます。ここを参照してください。

于 2009-09-15T08:06:19.680 に答える