我们正在架构中部署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附近''
如果有人知道,请帮助我们解决这些问题。
库马兰
答案 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')