java - @SearchableComponent 和前缀

标签 java jakarta-ee compass-lucene

我正在阅读有关 Compass(旧代码)的文档,但我不理解 @SearchableComponent 和前缀属性。有人可以在不引用文档的情况下尝试用自己的话解释它们的含义以及您应该如何使用它们吗?

最佳答案

3年前的问题,但希望有人会偶然发现这个问题并获得一些值(value)。

您可以选择指定的前缀将构成存储字段的属性名称的一部分。 Compass 本质上会遍历对象图并为每个可索引属性构造名称。

如果不指定 @SearchableComponent 的前缀,您可能会得到如下内容:

@Searchable(root=true)
class Customer {
    @SearchableProperty(name="name")
    String name;

    @SearchableComponent
    Address billingAddress;

    @SearchableComponent
    Address mailingAddress;
}

@Searchable(root=false)
class Address {
    @SearchableProperty(name="street")
    String street;

    @SearchableProperty(name="suburb")
    String suburb;
}

这将创建以下 3 个索引字段:

  • 姓名
  • 街道
  • 郊区

如您所见,最终邮寄地址和帐单地址字段都存储在相同的索引路径中 - streetsuburb

现在,这可能是您想要的,也可能不是。如果您需要区分邮寄地址和帐单地址(例如查找具有不同邮寄地址和帐单地址的人),您可以使用前缀。看一下下面修改后的代码,它添加了前缀:

@Searchable(root=true)
class Customer {
    @SearchableProperty(name="name")
    String name;

    @SearchableComponent(prefix="billing_")
    Address billingAddress;

    @SearchableComponent(prefix="mailing_")
    Address mailingAddress;
}

@Searchable(root=false)
class Address {
    @SearchableProperty(name="street")
    String street;

    @SearchableProperty(name="suburb")
    String suburb;
}

这将为您提供搜索键,如下所示:

  • 姓名
  • billing_street
  • billing_suburb
  • mailing_street
  • mailing_suburb

通过这种方式,您可以将邮寄地址和帐单地址字段作为不同的条目进行搜索。

总而言之,添加前缀是否会提供值(value)取决于您的用例。

关于java - @SearchableComponent 和前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455522/

相关文章:

hibernate - 如何使用 PostgreSQL 和 JPA 从实体类自动创建表?

grails - 使用Grails可搜索插件时正确的雪球分析仪配置

java - SQL查询速度: multiple queries vs sorting within Java

java - Swagger 参数文档

java.util.pref.WindowsPreferences 类在 JavaDoc 中不可用

java - 没有对 'MSysObjects' 的读取权限

java - 没有用于 EntityManager 的持久性提供程序,JPA 配置

java - Android - 如何捕获RTP数据包

java - 在哪里可以找到有关使用 Lucene 和 Compass 的有用信息?

grails - Grails可搜索插件