【发布时间】:2013-02-23 11:21:45
【问题描述】:
我有一个搜索框,它根据给定的输入对标题字段执行搜索,因此用户推荐了所有可用的标题,以插入的文本开头。它基于 Lucene 和 Hibernate Search。在输入空间之前它工作正常。然后结果消失。例如,我希望“Learning H”给我“Learning Hibernate”作为结果。但是,这不会发生。你能告诉我我应该在这里用什么吗?
查询生成器:
QueryBuilder qBuilder = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(LearningGoal.class).get();
Query query = qBuilder.keyword().wildcard().onField("title")
.matching(searchString + "*").createQuery();
BooleanQuery bQuery = new BooleanQuery();
bQuery.add(query, BooleanClause.Occur.MUST);
for (LearningGoal exGoal : existingGoals) {
Term omittedTerm = new Term("id", String.valueOf(exGoal.getId()));
bQuery.add(new TermQuery(omittedTerm), BooleanClause.Occur.MUST_NOT);
}
@SuppressWarnings("unused")
org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(
query, LearningGoal.class);
休眠类:
@AnalyzerDef(name = "searchtokenanalyzer",tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = StandardFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = StopFilterFactory.class,params = {
@Parameter(name = "ignoreCase", value = "true") }) })
@Analyzer(definition = "searchtokenanalyzer")
public class LearningGoal extends Node {
【问题讨论】:
-
将查询打印到输出肯定会对您有所帮助..
-
确实有用,但没有帮助我理解为什么我没有结果。例如,我有一个名为“学习概率论”的学习目标。对于输入字符串“learning p”,两个查询的输出是 bQuery:+title:learning p* hibQuery:FullTextQueryImpl(title:learning p*)。如果输入字符串是“学习”,它会找到值。
-
我也尝试用 ? 替换空格,但没有给出结果。
标签: java hibernate lucene full-text-search hibernate-search