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 - この結果が得られず、次のエラーが発生しました.ERROR 1064 (42000): index logtable: invalid schema: Count(*) or @count is queryed, but not available in the schema.

質問 2: "TransactionId" のフィールドの conf で STRING 属性として宣言しましたが、そのフィールドが where 条件で使用されている場合、レコードを取得できません。

    Example below, 

    select * from logtable where TransactionId='TRA23454'; 

次のエラーが表示されます。エラー 1064 (42000): sphinxql: 構文エラー、予期しない $undefined、CONST_INT または CONST_FLOAT または '"TRA23454"' 付近の '-' が必要です

わかっている場合は、これらの問題を解決するためにご協力ください。

クマラン

4

2 に答える 2

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

答え :

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

最初の例では、count(*) の代わりに「show meta;」を使用する必要があります。検索クエリの後にクエリを実行すると、total_count フィールドが含まれます。

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

2 番目の例では、文字列属性を WHERE、ORDER、または GROUP 句で使用できません。実際には、TransactionId を整数に変換し、整数属性を使用する必要があります。crc32 mysql 関数を使用するのは非常に簡単です。

于 2012-05-16T10:39:09.537 に答える