ローカル データベースとして YDN-DB (IndexedDB を抽象化したもの) を使用しています。「会話」というオブジェクト ストアがあり、そのストアには「参加者」というインデックスがあり、会話のさまざまなユーザーの ID を含む文字列があります。例えば:
会話例 #1:
id: 1234343434353456,
participants: '171e66ca-207f-4ba9-8197-d1dac32499db,82be80e2-2831-4f7d-a8d7-9223a2d4d511'
会話例 #2:
id: 4321343434356543,
participants: 'd7fa26b3-4ecc-4f84-9271-e15843fcc83f,171e66ca-207f-4ba9-8197-d1dac32499db'
インデックスで部分一致を実行するために、解決策として ydn-db-fulltext を使用してみました。全文カタログは次のようになります。
{
name: 'participants',
lang: 'en',
sources: [
{
storeName: 'conversations',
keyPath: 'participants',
weight: 1
}
]
}
カタログは生成されているようですが、完全一致に問題があるようです。たとえば、参加者インデックスのキーの一部のみを使用してクエリを実行すると、カタログから主キーが返されます。
db.search('participants', 'd7fa26b3').done(function(results) {
if(results.length == 0) console.debug('No results found...');
console.debug(results); // there is 1 object here!
var primaryKey = results[0].primaryKey; // primaryKey exists!
});
ただし、「-」を超える値を使用すると、検索リクエストは 0 件の結果を返します。
db.search('participants', 'd7fa26b3-4ecc-4f84-9271-e15843fcc83f').done(function(results) {
if(results.length == 0) console.debug('No results found...');
console.debug(results); // there are 0 objects in the array
var primaryKey = results[0].primaryKey; // primaryKey throws undefined since there are 0 results!
});
ドキュメントを読むと、「-」と「*」はそれぞれフレーズを削除し、プレフィックスに一致する予約文字であるため、これは理にかなっています。
クエリ形式はフリー テキストで、各トークンに暗示的および/または準論理演算子が適用されます。完全一致には二重引用符を使用し、結果から減算するには - を使用し、プレフィックス検索には * を使用します。
二重引用符のみを使用して単一引用符の中に二重引用符を入れ、バックスラッシュですべての「-」文字をエスケープしようとしましたが、これらのどれも機能していないようです。
問題は、文字列に「-」文字が含まれるインデックスでどのように一致を実行するかです。