簡體   English   中英

如何使用sphinx進行短語搜索

[英]How to do phrase search using sphinx

我需要使用sphinx創建短語搜索。 我使用此配置文件創建了索引

source sphinx_search
{
    type                                    = mysql
    # some straightforward parameters for SQL source types
    sql_host                                = localhost
    sql_user                                = root
    sql_pass                                = root
    sql_db                                  = mydatabase
    sql_port                                = 3306

    sql_query                       = \
        SELECT userId, usertype_id, searchdata from tbl_user;

    #sql_attr_uint                       = userId
    sql_attr_uint                       = usertype_id

     #document info query, ONLY for CLI search (ie. testing and debugging)
     #optional, default is empty
     #must contain $id macro and must fetch the document by that id
    sql_query_info      = SELECT * FROM tbl_user WHERE userId=$id;

}
index sphinx_search {
    source                          = sphinx_search
    path                            = /var/lib/sphinx/sphinx_search
    morphology                      = stem_en
    min_stemming_len        = 4
    stopwords                       = /var/data/sphinx/stopwords.txt
    min_word_len            = 3
    min_prefix_len          = 3
    min_infix_len           = 0
    enable_star                     = 1
    phrase_boundary = ., ?, !, U+2026 # horizontal ellipsis
    phrase_boundary_step = 100
    html_strip = 1

} 

indexer {
    mem_limit = 256M    
   #mem_limit       = 128M
    max_xmlpipe2_field = 16M 
}


searchd {   
    compat_sphinxql_magics  = 0     
    listen          = 9312  
    listen          = 9306:mysql41  
    log         = /var/log/sphinx/searchd.log   
    query_log       = /var/log/sphinx/query.log     
    read_timeout        = 5     
    max_children        = 30    
    pid_file        = /var/run/sphinx/searchd.pid   
    max_matches     = 10000     
    seamless_rotate     = 1     
    preopen_indexes     = 1     
    unlink_old      = 1     
    workers     = threads # for RT to work  
    binlog_path     = /var/data/ 
}

如果我試圖搜索“水污染”字樣

搜索結果顯示如下

words:
1. 'water': 10554 documents, 37143 hits
2. 'pollut': 1902 documents, 9657 hits

第一個問題是它沒有完全采用“污染”這個詞而不是它的“污染”。

第二個問題是它不是在尋找那個完整的詞。 即使我搜索

像這樣的“水污染”。

第三個問題我無法使用userId對結果進行排序。 如果我試圖添加

sql_attr_uint = userId

它沒有正確索引。

任何機構都可以幫助我解決這些問題。 請幫我。

簡而言之,您必須設置擴展匹配模式並使用擴展查詢語法

$cl->SetMatchMode ( SPH_MATCH_EXTENDED );
$cl->Query ( '"Water pollution"' );

請注意搜索詞周圍的雙引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM