Hibernate Search (Lucene) return 如果字符串中的 '=' 为空结果

Hibernate Search (Lucene) return empty result in case of '=' in string

我将 Lucene 配置为按 test 列中的值搜索我的 Hibernate 模型:

@Entity
@Table(name = "TEST")
@Audited
@Indexed
public class Test {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "ID")
   private Long id;

    @Column(name = "TEST")
    @Field(index = Index.YES,analyze = Analyze.YES,store = Store.NO)
    private String test;

    ...
}

在数据库测试模型中包含以下测试列值:

  1. AB=ABC
  2. AB=BCD

我创建了以下用于按列值搜索的代码:

String queryValue = "AB";
QueryBuilder qb = org.hibernate.search.jpa.Search.getFullTextEntityManager(em).getSearchFactory().buildQueryBuilder().forEntity(Test.class).get();
Query query = qb.all().createQuery();

BooleanJunction<BooleanJunction> conjuction = qb.bool();
String searchValue = new StringBuilder().append("*").append(queryValue .toLowerCase()).append("*").toString();
conjuction.should(qb.keyword().wildcard().onFields(new String[] { "test"}).matching(searchValue).createQuery());
query = conjuction.createQuery();

FullTextQuery textQuery = org.hibernate.search.jpa.Search.getFullTextEntityManager(em).createFullTextQuery(query, Test.class);
return textQuery.getResultList();

以上代码可以找到值 AB 和 Lucene return 我的 2 条记录,但是当我寻找 AB= 时,它 return 是我的空结果。


更新

这是索引代码:

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
fullTextEntityManager.createIndexer().startAndWait();

你知道为什么我得到空结果吗,因为 Lucen 应该 return 我 2 条记录?我该如何解决?

默认使用的分析器是StandardAnalyzer https://docs.jboss.org/hibernate/search/5.3/reference/en-US/html_single/#analyzer

standaranalyzer 在 = 上拆分标记并从生成的标记中也删除 =

因此在您索引 AB=ABC 时,会创建以下标记。

AB, ABC

这就是为什么当您搜索 *AB* 时会得到结果

但是当您搜索 *AB=* 时,您找不到任何东西,因为没有这样的标记。