2012-09-11 53 views
0

我有720个狮身人面像索引,大小为1.21 GB。这里附上了所有索引和一项服务。它需要800MB的RAM。我已经使用sql_attr_str2ordinal来存储字符串,所以RAM减少了,现在只需要17MB。但这里的问题是搜索结果给0匹配。搜索是从sphinx索引使用java api应用。 的conf文件和Java代码如下:狮身人面像搜索结果给出0个匹配项

searchd{  
listen   = 516 
log    = D:\programs\spinx\spinxexperiment\project\log\searchd.log 
query_log  = D:\programs\spinx\spinxexperiment\project\log\query.log 
read_timeout = 5 
max_children = 30 
pid_file  = D:\programs\spinx\spinxexperiment\project\log\searchd.pid 
max_matches  = 1000 
seamless_rotate = 0 
preopen_indexes = 0 
unlink_old  = 1 
ondisk_dict_default = 1 
mva_updates_pool = 1M 
workers   = threads # for RT to work} 

source webusagedatagroup20120301{ 
type   = pgsql 
    sql_host  = 127.0.0.1 
    sql_user  = postgres 
sql_pass  = 
sql_db   = iviewdb 
sql_port  = 5432 
sql_query  = SELECT id,username as username_ord,domain as domain_ord,application,hits,bytes from webusagedata1   
sql_attr_str2ordinal = username_ord 
sql_attr_str2ordinal = domain_ord 
sql_attr_str2ordinal = application 
sql_attr_bigint  = hits 
sql_attr_bigint  = bytes} 

    index webusagedatagroup20120301{ 
source = webusagedatagroup20120301 
path = D:\programs\spinx\spinxexperiment\project\data\20120301\group\webusagedatagroup20120301 
preopen   = 0 
docinfo   = inline 
ondisk_dict  = 1 
charset_type  = sbcs 
rt_field  = username 
rt_field  = domain 
rt_field  = application 
rt_attr_bigint  = hits 
rt_attr_bigint  = bytes} 

代码:

client = new SphinxClient("127.0.0.1",516);   
client.SetMatchMode(SphinxClient.SPH_MATCH_PHRASE); 
query=prepareQuery(); 
client.SetLimits(0, 20);    
client.SetMaxQueryTime(0); 
client.SetConnectTimeout(60000); 
client.SetSelect("*, SUM(bytes) as bytes_total");   
client.SetGroupBy("application", SphinxClient.SPH_GROUPBY_ATTR,"username asc"); 
SphinxResult res = client.Query("divyesh.modi", "webusagedatagroup20120130"); 

回答

0

由于对狮身人面像论坛上讨论过。索引需要一个字段才能工作。您的索引没有字段,因此无效。

你似乎希望能够通过用户名来查找,需要进行用户名既是一个字段和ordinaal属性(这样你就可以做的组,而不必使用字符串属性)

您需要请注意sql_query中的两次列,一次为字段,一次为属性。

+0

当我使用sql_field_string它会在创建索引时产生错误,因为我已经使用docinfo作为'inline'。 –

+0

那么不要使用sql_field_string!你已经决定不使用我认为的字符串属性。 – barryhunter