Django sphinx仅在app重启后才能运行

时间:2010-05-12 09:44:10

标签: django search full-text-search sphinx django-sphinx

我在我的项目中设置了django-sphinx,它只在一段时间内完美运行。稍后它总是返回空结果集。令人惊讶的是,重启django app会修复它。并且搜索再次工作,但仅在短时间内(或非常有限的查询数量)。继承人我的sphinx.conf:

source src_questions
{
    # data source
    type        = mysql
    sql_host    = xxxxxx
    sql_user    = xxxxxx #replace with your db username
    sql_pass    = xxxxxx #replace with your db password
    sql_db      = xxxxxx #replace with your db name
    # these two are optional
    sql_port    = xxxxxx
    #sql_sock   = /var/lib/mysql/mysql.sock

    # pre-query, executed before the main fetch query
    sql_query_pre   = SET NAMES utf8

    # main document fetch query
    sql_query       =       SELECT q.id AS id, q.title AS title, q.tagnames AS tags, q.html AS text, q.level AS level \
                            FROM question AS q \
                            WHERE q.deleted=0 \

    # optional - used by command-line search utility to display document information
    sql_query_info  = SELECT title, id, level FROM question WHERE id=$id

    sql_attr_uint   = level
}

index questions {
    # which document source to index
    source      = src_questions

    # this is path and index file name without extension
    # you may need to change this path or create this folder
    path            = /home/rafal/index/index_questions
    # docinfo (ie. per-document attribute values) storage strategy
    docinfo     = extern

    # morphology
    morphology  = stem_en

    # stopwords file
    #stopwords  = /var/data/sphinx/stopwords.txt

    # minimum word length
    min_word_len    = 3

    # uncomment next 2 lines to allow wildcard (*) searches
    min_infix_len = 1
    enable_star = 1

    # charset encoding type
    charset_type    = utf-8
}

# indexer settings
indexer
{
    # memory limit (default is 32M)
    mem_limit   = 64M
}

# searchd settings
searchd
{
    # IP address on which search daemon will bind and accept
    # optional, default is to listen on all addresses,
    # ie. address = 0.0.0.0
    address     = 127.0.0.1

    # port on which search daemon will listen
    port        = 3312

    # searchd run info is logged here - create or change the folder
    log     = ../log/sphinx.log

    # all the search queries are logged here
    query_log   = ../log/query.log

    # client read timeout, seconds
    read_timeout    = 5

    # maximum amount of children to fork
    max_children    = 30

    # a file which will contain searchd process ID
    pid_file    = searchd.pid

    # maximum amount of matches this daemon would ever retrieve
    # from each index and serve to client
    max_matches = 1000
} 

以及来自views.py:

的我的搜索部分
content = Question.search.query(keywords)
    if level:
        content = content.filter(level=level)#level is array of integers

任何日志都没有错误,它不会返回任何结果。我已经将'indexer --rotate --all'设置为每隔5分钟在cron中运行,并且searchd一直在运行。 非常感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

狮身人面像的版本是什么? Django的狮身人面像? sphinxsearch api?蟒?

无论如何,请尝试从indexer&中删除cron。看看这个问题是否仍然存在。让我知道这是怎么回事。