Sphinx RT索引和SphinxQL查询

时间:2012-05-15 07:20:23

标签: php open-source full-text-search sphinx

我们正在架构中部署RT索引。但是我们需要一些澄清,并在部署过程中遇到一些困难。

索引中定义的模式:

        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中获取count()查询结果。因为它对我们很重要,根据客户的数量,我们必须在我们的应用程序中展示它。

以下示例,

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

在SphinxQL中 - 我们没有得到此结果并收到以下错误.ERROR 1064(42000):索引logtable:无效架构:查询Count(*)或@count,但架构中不可用。

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

    Example below, 

    select * from logtable where TransactionId='TRA23454'; 

我得到以下错误,             ERROR 1064(42000):sphinxql:语法错误,意外$ undefined,期待CONST_INT或CONST_FLOAT或' - ''TRA23454附近''

如果有人知道,请帮助我们解决这些问题。

库马兰

2 个答案:

答案 0 :(得分:2)

在第一个例子而不是count(*)中,您需要使用'show meta;'搜索查询后查询,它将包含total_count字段。

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

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

答案 1 :(得分:2)

select * from logtable where TransactionId='TRA23454';

答案:

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