【问题标题】:How to configure type name or filter by type query with Elasticsearch integration?如何使用 Elasticsearch 集成配置类型名称或按类型查询过滤?
【发布时间】:2017-11-07 14:10:13
【问题描述】:

我将 Hibernate Search 与 Elasticsearch 的集成分别与 5.8.2 和 5.6 版本结合使用。

假设我有 2 个使用相同数据库的应用程序,我想搜索 Person 实体。这两个应用程序都会更新索引,但只有其中一个会读取。

由于默认情况下 Hibernate Search 使用 types 的完全限定类名,我最终会为同一实体提供 2 种不同类型,例如:

Person -> com.example.x.Person

Person -> com.example.y.Person

在我正在执行搜索的应用程序中,在构建搜索查询时,Hibernate Search 会自动为type 添加filter 查询,例如:

"filter": {
    "type": {"value": "com.example.x.Person"}
}

因此搜索结果不包含来自com.example.y.Person 类型的记录。

有什么方法可以自定义类型名称吗?

或者,有什么方法可以禁用/自定义添加的filter 查询?

【问题讨论】:

    标签: hibernate-search


    【解决方案1】:

    你暂时做不到。

    有趣的是,几天前我们刚刚有一个非常相似的问题:Override Elasticsearch _type in Hibernate Search

    我的建议如下:如果它是完全相同的实体,您应该将其提取到一个公共 jar 中并在您的两个应用程序中使用相同的实体(如果您无法提取它,您仍然可以使用相同的包,但我建议提取它,以便您确定它完全相同)。

    【讨论】:

    • 好巧合 :) 好的,我明白了。构造的查询呢,我想没有办法自定义或禁用filter查询,对吧?
    • 不,您不能禁用它。您可以直接使用 Elasticsearch 客户端来定位索引,但我不建议这样做。坦率地说,您最好在 2 个应用程序之间共享您的课程。
    • @sedooe 这是很好的反馈,我们将在 Hibernate Search 的未来版本中看到如何更好地处理这个问题。谢谢!
    • 谢谢你们俩!顺便说一句,让我把这个link 丢掉一些让我很想知道的事情,希望你有时间能得到答案:)
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多