3

我们正在我们的架构中部署 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 - 我们没有得到这个结果并得到以下错误。错误 1064 (42000): index logtable: invalid schema: Count(*) or @count 被查询,但在模式中不可用。

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

    Example below, 

    select * from logtable where TransactionId='TRA23454'; 

出现以下错误,ERROR 1064 (42000): sphinxql: syntax error, unexpected $undefined, expecting CONST_INT or CONST_FLOAT or '-' near '"TRA23454"'

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

库马兰

4

2 回答 2

2

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

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

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

于 2012-05-16T10:39:09.537 回答
2
select * from logtable where TransactionId='TRA23454';

回答 :

select * from logtable where  MATCH('@TransactionId TRA23454')
于 2013-02-04T10:20:35.423 回答