【发布时间】:2017-09-20 09:39:48
【问题描述】:
我的以下 Lucene 查询
org.apache.lucene.search.Query luceneQuery = qb.bool()
.should(qb.keyword().onField("name").matching(searchString.toLowerCase()).createQuery()).createQuery();
result= getFullTextEntityManager().createFullTextQuery(luceneQuery, Verb.class).setProjection(ProjectionConstants.THIS, ProjectionConstants.SCORE).setMaxResults(1).getResultList();
返回:[null, 6.170484] for searchString 'mix'
这是我第一次观察到 null 作为匹配项而不是匹配的实例返回。
以下是我的 Verb.class 上的注释
@Field(analyze=Analyze.YES, store=Store.YES, termVector=TermVector.YES)
private String name;
有人知道吗?
TIA
编辑
@Entity
@Table(name="mverb")
@Indexed
public class Verb extends Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Field(analyze=Analyze.YES, store=Store.YES, termVector=TermVector.YES)
private String name;
}
在应用程序加载时
indexAllVerbs();
searchVerbs("mix");
功能:
protected FullTextEntityManager getFullTextEntityManager() {
return Search.getFullTextEntityManager(em);
}
public void indexAllVerbs() {
for (Verb b : Foo.getVerbs()) {
getFullTextEntityManager().index(b);
}
}
public List<Object[]> searchVerbs(String searchString) {
QueryBuilder qb = getFullTextEntityManager().getSearchFactory().buildQueryBuilder().forEntity(Verb.class).get();
org.apache.lucene.search.Query luceneQuery = qb.bool()
.should(qb.keyword().onField("name").matching(searchString.toLowerCase()).createQuery()).createQuery();
return getFullTextEntityManager().createFullTextQuery(luceneQuery, Verb.class).setProjection(ProjectionConstants.THIS, ProjectionConstants.SCORE).setMaxResults(1).getResultList();
}
【问题讨论】:
标签: java lucene full-text-search hibernate-search