2017-01-20 3 views
3

現在、私はlibsqlite経由でFTS5クエリを実行しようとしており、クエリを特定の列に制限する必要があります。FTS5クエリ全体を単一の列に限定する方法は?

SELECT foo, bar FROM tableName WHERE columnName MATCH ?

し、文に検索文字列を結合する:FTS4では、これが行うことによって可能でした。ただし、FTS5では、MATCH演算子のLHSはFTS表名そのものでなければならず、列名は問合せの一部でなければなりません。

SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:' || ?

これは、bind edの文字列が単一のフレーズである場合に機能します。ただし、検索テキストthis is greatを考えてみてください。クエリは、次のようになります。

SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:pizza is great';

のみpizzacolumnNameにに制限されていますが、フレーズの残りの部分は、すべての列と照合されます。

どうすれば対処できますか?

+1

を 'このフレーズがgreat'ではないですが、それは3つのフレーズです。 –

+0

CL。、ありがとう、「検索テキスト」と呼ばれるように編集 – caughtinflux

+0

検索テキストを1つのフレーズまたは3つのフレーズにしますか? –

答えて

1

documentationは言う:

一言...コロン文字が続く列名でそれを付けることによってFTSテーブルの指定された列内のテキストのマッチングに制限することができます。

したがって、列名は1つのフレーズにのみ適用されます。あなたは3つのフレーズを持っている場合は は、あなたが列名を3回指定する必要があります。

tableName MATCH 'columnName:pizza columnName:is columnName:great' 
+0

私は最近、この問題をもう一度見て、検索テキストの形式が分からないときにはこの解決策が実際には実現できないことに気付きました。 – caughtinflux

関連する問題