2016-05-23 17 views
0

が、私は新たなんだ特定のキーワードを含むインデックスフィールドをフェッチし、ここで私の実装は次のとおりです。 は、私は私が持っている私のデータベース内のエンティティとその場のHibernate Searchは:Hibernateの検索を使用しての

@AnalyzerDef(name = "ngram", 
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), 
filters = { 

    @TokenFilterDef(factory = StandardFilterFactory.class), 
    @TokenFilterDef(factory = LowerCaseFilterFactory.class), 
    @TokenFilterDef(factory = StopFilterFactory.class), 
    @TokenFilterDef(factory = NGramFilterFactory.class, 
    params = { 
     @Parameter(name = "minGramSize", value = "3"), 
     @Parameter(name = "maxGramSize", value = "3") }) 
} 
) 

@Indexed 
@Entity 
@Table(name="USERS") 
public class User { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Integer id; 

    @Field 
    @Column(nullable=false,length=30,name="first_name") 
    private String firstName; 

    @Column(nullable=false,length=30,name="last_name") 
    private String lastName; 


    @Column(length=128) 
    @Field([email protected](definition="ngram")) 
    private String login; 

    @Column(length=255) 
    private String password; 

で始まります以下のデータを含む2つのレコード:


| id | first_name | last_name |ログイン|パスワード|


| 1 | NULL | NULL |メドナブリ| * | | 2 | NULL | NULL |メディナブリ| * |

私は結果のログインを表示するフィールドのログインに関する研究を適用するときに私が取得:

入力されたキーワードを:mednabli mednabli

入力されたキーワード:med-

結果をmedが

結果:

nabli:(何も)私は、MED-nabli取得する

入力されたキーワードを必要としながら、

結果:mednabli私はmednabli

mednabli入力されたキーワードを取得する必要がありながら:私はmednabli mednabli

を取得する必要がありながら、そうでください(何も):

結果をkamedそこには、検索結果を得るための方法があります。アナライザーは、私のアプリケーションを動作させるためにそれに依存する必要があります。

答えて

1

まず、1つのフィールドだけでは何も得られないということです。したがって、別のフィールドを作成する必要があります(単一のプロパティに複数のフィールドを定義するには、@Fieldsアノテーションを参照してください)。この新しいフィールドには、キーワードトークナイザと小文字のフィルタが必要です。次に、2つ目のフィールドのクエリを "yoursearch"に設定して、両方のフィールドをクエリしてクエリを作成します。

これは、「型付きキーワード:kamed」以外のすべてのケースを解決します。これについては、クエリの作成と実行の方法を教えてください。

注:ログイン検索で[停止]フィルタを定義して削除することはお勧めできません。

+0

kamedというキーワードの場合、この最後は3-gramに分割されます:kam、ame、medとなるので、 "med"を含むすべてのログインを取得する必要があります。返信のためにあなたのソリューションTyを試してみます:) –

関連する問題