【问题标题】:Hibernate Search Lucene query parser with Special Characters具有特殊字符的 Hibernate Search Lucene 查询解析器
【发布时间】:2021-06-21 14:15:17
【问题描述】:

第一个问题: 有人可以向我解释一下 Hibernate Search 中的 lucene 查询如何处理特殊字符。我阅读了有关 Hibernate searchLucene Regexp Syntax 的文档,但不知何故,它们并没有与生成的查询和结果相加。

假设我有以下数据库条目:

name
Will
Will Smith
Will - Smith
Will-Smith

我正在使用以下查询:

Query query = queryBuilder  
    .keyword()           
    .onField("firstName")
    .matching(input)
    .createQuery();     

现在我正在寻找以下输入:

Will -> 返回所有 4 个条目,并生成以下查询:FullTextQueryImpl(firstName:will)

Will Smith -> 还使用以下生成的查询返回所有 4 个条目:FullTextQueryImpl(firstName:will firstName:smith)

Will - Smith -> 还使用以下生成的查询返回所有 4 个条目: FullTextQueryImpl(firstName:will firstName:smith) ?根据Lucene Query Syntax,“-”在哪里或者不应该禁止“-”之后的所有内容?

Will-Smith -> 这里也一样

Will-Smith -> 在这里我尝试使用反斜杠但结果相同

Will -Smith -> 这里也一样

第二个问题:假设我有以下数据库条目,其中没有数字结尾的条目始终存在,而带有数字结尾的条目可能在数据库中。 对此的 lucene 查询会是什么样子?

name
Will
Will1
Will2

【问题讨论】:

  • 你能提供一些澄清吗? (1) 您使用的是哪个版本的 Lucene?或者,如果更容易的话,哪个版本的 Hibernate Search? (2) 我不确定您显示搜索的方式是什么意思。例如,在Will - Smith -> 中,那个箭头-> 是什么意思? (3) 我不确定您所说的“- ...在哪里?”是什么意思?你的意思是它在结果中的什么位置?或者您需要将它放在查询中的什么位置?很难知道你在哪里卡住了。
  • (4) 您是否提供了自定义分析器?若有,详情为何? (5) 你在你的实体和你的名字字段上使用了哪些注释? (6) 您是否总是使用.keyword() 进行所有查询?所有这些点都会影响您的数据的索引方式以及查询返回的结果,因此如果我们能看到所有这些详细信息,可能会更容易提供帮助。

标签: java search lucene special-characters hibernate-search


【解决方案1】:

您可以使用 Lucene 分析器,看看幕后发生了什么。这是一个教程:https://www.baeldung.com/lucene-analyzers

标记器是可插入的,因此您可以更改特殊字符的处理方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2010-09-22
    相关资源
    最近更新 更多