0

ローカル データベースとして 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!
});

ドキュメントを読むと、「-」と「*」はそれぞれフレーズを削除し、プレフィックスに一致する予約文字であるため、これは理にかなっています。

クエリ形式はフリー テキストで、各トークンに暗示的および/または準論理演算子が適用されます。完全一致には二重引用符を使用し、結果から減算するには - を使用し、プレフィックス検索には * を使用します。

二重引用符のみを使用して単一引用符の中に二重引用符を入れ、バックスラッシュですべての「-」文字をエスケープしようとしましたが、これらのどれも機能していないようです。

問題は、文字列に「-」文字が含まれるインデックスでどのように一致を実行するかです。

4

2 に答える 2

1

試してみませんかdb.search('participants', '"d7fa26b3"')

ところで、想定されていない全文検索を使用しています。文字列をトークン化し、手動でインデックスを作成する必要があります。

于 2014-07-17T23:54:03.737 に答える