Hibernate lucene搜索包括""和" a"作为搜索的一部分

时间:2014-11-11 23:39:07

标签: hibernate search hibernate-search

我使用Hibernate Lucene索引表MOVIE。我想按标题列进行索引和搜索,包括""和" a"作为搜索的一部分。前,"最后一个站着的人#34; "最想要的男人"。 "该"和" A"是相关的搜索结果的一部分。

问题是如果我在@Field中使用index = Index.UN_TOKENIZED,则无法进行搜索。如果我使用了Index.TOKENIZED,那么我就无法用"""和" a"。

有人可以给我一些指导吗?提前谢谢。

以下是代码段:

@Field(index = Index.UN_TOKENIZED,store = Store.NO)<<<我也试过了Index.TOKENIZED。 @Column(name =" TITLE") 私有字符串标题;

搜索代码:

@Field(index = Index.UN_TOKENIZED, store = Store.NO)  <<< I've tried Index.TOKENIZED also.

@Column(name =&#34; TITLE&#34;) 私有字符串标题;

搜索代码: FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);

QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()。buildQueryBuilder()。forEntity(Movie.class).get(); 查询luceneQuery = queryBuilder.keyword()。onField(&#34; title&#34;) .matching(title.toLowerCase())的createQuery();

返回fullTextEntityManager.createFullTextQuery(luceneQuery,Movie.class) .getResultList();

1 个答案:

答案 0 :(得分:0)

我认为这是一种解决方案,通过定义分析器。这将标记,但不会排除常用词&#34;&#34;。 此外,在搜索代码中,使用方法QueryBuilder.phrase()而不是keyword(),以便根据搜索短语执行搜索。

@AnalyzerDef(name =&#34; custom&#34;,tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),filters = {         @TokenFilterDef(factory = LowerCaseFilterFactory.class),         @TokenFilterDef(factory = SnowballPorterFilterFactory.class,params = {@Parameter(name =&#34; language&#34;,value =&#34; English&#34;)})}) 公共课电影{

@Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO)
@Analyzer(definition="custom")
private String title;

... }

搜索代码:         QueryBuilder qb = fullTextEntityMgr.getSearchFactory()                 。.buildQueryBuilder()forEntity(Movie.class)获得();

查询luceneQuery = qb.phrase()。onField(&#34; title&#34;)。sentence(term.toLowerCase())。createQuery();    javax.persistence.Query query = fullTextEntityMgr.createFullTextQuery(luceneQuery,Movie.class);