@SearchableComponent和前缀

时间:2012-09-17 08:24:21

标签: java java-ee compass-lucene

我正在阅读有关Compass(遗留代码)的文档,但我不了解@SearchableComponent和prefix属性。有人可以尝试用自己的语言解释而不参考文档的含义,以及你应该如何使用它们?

1 个答案:

答案 0 :(得分:0)

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个索引字段:

  • name
  • street
  • suburb

正如您所看到的,您最终将邮件和结算地址字段存储在相同的索引路径中 - 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;
}

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

  • name
  • billing_street
  • billing_suburb
  • mailing_street
  • mailing_suburb

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

总而言之,取决于您的使用案例,添加前缀是否会提供价值。