java - Apache Lucene createFullTextQuery 返回匹配的空对象

标签 java lucene full-text-search hibernate-search

我的以下 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();

对于 searchString 'mix' 返回:[null, 6.170484]

这是我第一次观察到 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();
}

最佳答案

这很可能意味着从匹配文档中提取的标识符与数据库中的任何实体都不匹配。

两个可能的原因:

  1. 您在 ID 上使用了异国情调的现场桥,但效果不佳。检查您的实现情况。
  2. 由于某种原因,您的索引不同步。 Reindex your database .

关于java - Apache Lucene createFullTextQuery 返回匹配的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46318519/

相关文章:

不同类字段的 JavaFX TreeItem css 样式

java - Elasticsearch 中的模式匹配?

apache - Solr 4 - 缺少必填字段 : uuid

mysql - 搜索查询中最匹配的词

node.js - 为什么Elasticsearch无法检测到我的定制分析仪?

Java 将变量传递给映射的 DTO 方法?

java - 遍历嵌套的括号内容

java - 我启动 tomcat,我的代码运行良好,但在一段时间后发生通信链接故障异常

java - Solr数据配置中如何从多表中获取数据

python - 在文本文件中搜索字符串,保存包含列表中项目的行,如果文本文件中不存在该项目,则返回 NA