2012-05-15 42 views
3

我们正在我们的体系结构中部署RT索引。但是我们需要一些澄清和部署过程中遇到的一些困难。Sphinx RT索引和SphinxQL查询

架构中定义的索引:

 index logtable 
     { 
     type = rt 
     path = /usr/local/sphinx20/var/data/logtable 
     rt_attr_string = TransactionId 
      rt_attr_uint = CustomerId 
     rt_attr_timestamp = DateOfTransaction 
     rt_attr_string = CustomerFeedback 
     rt_field = TransactionType 
     } 

面临的问题

问题1: 我们如何能在SPHINXQL获得计数()查询结果。因为它对我们很重要,根据客户数量,我们必须将其展示在我们的应用程序中。下面

例,

Query - select count(*) from logtable where CustomerId='871'; 

在SphinxQL - 我们没有得到这样的结果,并得到以下error.ERROR 1064(42000):指数logtable:无效的架构:COUNT(*)或@count查询,但在模式中不可用。

问题2: 我在conf中为“TransactionId”字段声明了一个STRING属性,但是如果该字段在where条件中使用,我无法检索记录。

Example below, 

    select * from logtable where TransactionId='TRA23454'; 

继错误我得到, ERROR 1064(42000):sphinxql:语法错误,意想不到的$不确定,预计CONST_INT或CONST_FLOAT或 ' - ' 近 ' “TRA23454”'

请帮助我们如果知道就关闭这些问题。

库马兰

回答

2
select * from logtable where TransactionId='TRA23454'; 

答:

select * from logtable where MATCH('@TransactionId TRA23454') 
2

在第一个例子,而不是COUNT(*),你需要使用 '秀元;'在搜索查询后查询,它将包含total_count字段。

select id from logtable where CustomerId='871'; 
show meta; 

在第二个示例中,字符串属性不能在WHERE,ORDER或GROUP子句中使用。 其实你需要将TransactionId转换为整数并使用整数属性。使用crc32 mysql函数很简单。

+0

其实字符串属性可以用于排序和分组。但是,没有不适用于条款 – barryhunter

+0

Barry,因此文档不正确?从文档:从1.10-beta开始,字符串只能用于存储和检索。他们不能参与表达式,用于过滤,排序或分组(即在WHERE,ORDER或GROUP子句中)。 –

+0

是的。该文件已过时。请参阅http://sphinxsearch.com/bugs/view.php?id=1138 – barryhunter