2016-05-31 8 views
2

Hibernate Searchに基づいてフルテキスト検索エンジンを実装しました。Hibernate Searchで検索するとUTF-8文字が無視される

解決策を探しています。私は、ポーランド語(UTF-8)文字のテキストを "zażółćgęśląjaźń"のように持っています。私が "jaźń"を検索しているときは、すべてがOKで結果が見つかります。しかし、私が "jazn"を探しているとき、結果は見つからない。

"jaźń"、 "jazń"、 "jaźn"、 "jazn"のすべての語句を検索し、検索された "zażółćgęśląjaźń"のテキストを検索します。 Hibernate Searchを設定するにはどうしたらいいですか?

答えて

6

索引付け/照会の前にテキストを分析するアナライザーを定義する必要があります。

はあなたの問題を解決するにはsection 4.3

、分析器、および分析に関するより完全な情報については、 を休止検索ドキュメントsection 1.8を参照してください、あなたが定義するアナライザは、自分に非ASCII文字を変換ASCIIFoldingFilterを含める必要が最も近いASCII相当(おそらくLowerCaseFilter)。 See this example

Hibernate Search DSLを使用してクエリを構築する場合、自動的に行われます。株式Luceneを使用してクエリを作成する場合は、an example hereがあり、自動的にフィールドにバインドされます。

ワイルドカードクエリはデフォルトでは解析されないため、ワイルドカードを使用する場合は、文字列をクリーンアップしてからクエリに渡す必要があります。

ワイルドカードhereの照会をサニタイズする方法の例を見ることができます。

this sort of codeの下のASCIIFoldingFilterを使用します。

+0

ありがとうございました。しかし、これは私が考える索引付け手順を含むだけです。だから私はインデックスに "zazolc gesla jazn"を持っています。そして今私が "jaźń"で検索するとき、それは働くでしょうか?あるいは、何とか検索用語を事前に作成する必要がありますか? –

+0

私は答えを完了しました。あなたは今すべてのポインタを持っているはずです。 –

+0

ありがとう!私は[Querydsl for Hibernate Search](https://github.com/querydsl/querydsl/tree/master/querydsl-hibernate-search)を使用していますが、ASCIIFoldingFilterの使用方法はわかりませんので、おそらく準備が必要ですQuerydslに送信する前に自分で検索してください –

関連する問題