1

Redisearch で "begins with" を厳密に使用してクエリを実行する方法を理解しようとしていますが、"contains" を取得し続けています。

たとえば、 「football」「myfootball」「greenfootball」などの値を持つフィールドがあり、次のような検索語を提供するとします。

> FT.SEARCH myIdx @myfield:foot*

「サッカー」を取得したいだけですが、その単語で始まるのではなく、単語を含む他のフィールドを取得し続けます。

これを回避する方法はありますか?

私は使用しようとしてVERBATIMいまし@myfield:^foot*たが、何もありませんでした。

クライアントとして JRedisearch を使用していますが、最終的に何が起こっているのかを把握するために、DB に入り、これらのクエリを手動で実行する必要がありました。そうは言っても、現時点でこのクライアントでこれを行うことは可能ですか?

ありがとう

編集 私のインデックス設定のサンプル:

Client client = new Client(INDEX_NAME, url, PORT);
Schema sc = new Schema().addSortableTextField("url", 1.0); // using this field for query
client.dropIndex(true);
client.createIndex(sc, Client.IndexOptions.Default());
return client;

サンプル文書:

id: // random uuid
urlPath: myfootbal
application: web
market: Europe
4

1 に答える 1

1

提供された RDB を確認したところ、foot* を検索すると myfootbal が取得されないことがわかりました。返信は /dot-com/plp/football/x/index.html のようになります。この URL はトークン化されており、「/」はトークン化文字の 1 つであるため、これらの応答を取得しています。これらの URL をトークン化したくない場合は、それらを TEXT ではなく TAGS として宣言する必要があります。このようにして、URL 全体がそのままインデックス化され、foot* を検索しても結果に表示されません。

TAGS の詳細については、FT.CREATE のドキュメント ( https://oss.redislabs.com/redisearch/Commands.html ) を参照してください。

于 2019-05-19T08:45:20.210 に答える