2016-10-27 3 views
0

javaのelasticsearchで始まります。文字が含まれている検索では、Elasticsearchで検索された結果は見つかりません。

テキストを含むプロパティを持つドキュメントに一致するクエリを作成できます。このプロパティは文字列です。

結果が異常です。文字列内の数値を検索しているときに結果が表示されますが、クエリに文字が含まれるとすぐに結果は返されません。ここで

は、現在の動作の概要です:

私は2つの文書があります:私は "123" を探していた場合、私は2つの結果を持って

{ 
    model:"123", 
    serialNumber: "123" 
} 

{ 
    model:"123", 
    serialNumber: "TT123" 
} 

を=> OK

「TT」を検索しても、結果はありません。

私はワイルドカードを使用しています。ここで

は、私のコードのサンプルです:

BoolQueryBuilder bqb = new BoolQueryBuilder(); 
bqb.should(new WildcardQueryBuilder("serialNumber", "*TT*")); 
/*or bqb.should(new WildcardQueryBuilder("serialNumber", "*123*"));*/ 

return QueryBuilders.filteredQuery(bqb, null); 

答えて

0

んが、 "* TT *" 2件の結果を見つけますか?ワイルドカードクエリは分析されませんが、分析されたインデックスはおそらくインデックスに「tt123」が含まれているため「* TT *」ではなく「* tt *」になります。

これはワイルドカードが遅いと言いますが、ngramなどの他のアナライザーを調べてインデックスを作成する必要があります。

+0

はい、あります。私は本当に初心者なので、大文字小文字を無視する方法を教えてもらえますか? – user2401221

+0

TTを保持している文字列にtoLoweCase()を呼び出すだけで、 –

関連する問題