【发布时间】:2012-09-17 08:24:20
【问题描述】:
我正在阅读有关 Compass(遗留代码)的文档,但我不了解 @SearchableComponent 和前缀属性。有人可以在不参考文档的情况下尝试用自己的话解释它们的含义以及您应该如何使用它们吗?
【问题讨论】:
-
这实际上与地理定位有关,还是另一种指南针?
标签: java jakarta-ee compass-lucene
我正在阅读有关 Compass(遗留代码)的文档,但我不了解 @SearchableComponent 和前缀属性。有人可以在不参考文档的情况下尝试用自己的话解释它们的含义以及您应该如何使用它们吗?
【问题讨论】:
标签: java jakarta-ee compass-lucene
3 年前的问题,但希望有人会偶然发现这个问题并获得一些价值。
您可以选择指定的前缀将构成存储字段的属性名称的一部分。 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 个索引字段:
namestreetsuburb如您所见,邮寄地址和帐单地址字段都存储在相同的索引路径中 - street 和 suburb。
现在,这可能是也可能不是您想要的。如果您需要区分邮寄地址和帐单地址(例如查找具有不同邮寄地址和帐单地址的人),您可以使用前缀。看看下面修改后的代码,添加了前缀:
@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;
}
这将为您提供如下搜索键:
namebilling_streetbilling_suburbmailing_streetmailing_suburb通过这种方式,您可以将邮寄地址和帐单地址字段作为不同的条目进行搜索。
总而言之,添加前缀是否会提供价值取决于您的用例。
【讨论】: