2017-11-10 3 views
0

username:[email protected]*のクエリはhttp://localhost:8983/solr/user/select?q=username%3Auser%40site*&wt=json&indent=trueですが、結果の数は0です。*を削除すると正しい結果が得られます。クエリusername:userusername:user*を使用すると、結果は同じになります。solrクエリで「@」の後に「*」を意味するもの

クエリで@の後に*を使用した場合、どうなりますか?

答えて

1

唯一起こっていることは、*がクエリにワイルドカードクエリを行うことです。クエリにワイルドカードがある場合、解析は行われません(正確には正しくないが、特定のマルチテープウェアフィルタが適用されているため)。たとえば、フィールドが@に分割されている場合は、インデックス作成時にusersiteのトークンに分割されますが、クエリを実行しても同じ分割は発生しません。

So Luceneは[email protected]で始まるトークンを見つけようとしますが、インデックスで利用できるトークンはusersiteなので、一致しません。 user*を検索しようとすると、おそらくヒットします。

[Solrの管理]の[分析]ページを使用して、入力用にフィールドがどのように処理されているかを確認できます。

+0

そして、どのように私のクエリをうまく機能させるために書き直すことができますか? –

+2

schema.xmlを変更し、 'username'に' KeywordTokenizerFactory'を使用することでこれを修正できます。それでは、 '@'を使ってクエリを行うことができます。 – drjz

+0

..目標はuser @ domain文字列のプレフィックスで照会することを前提として、KeywordTokenizerを使用して動作する必要があります。これには別のフィールドを使用することもできます。また、copyField命令を使用して、プレフィックス – MatsLindh

関連する問題