2012-09-17 57 views
1

我正在阅读有关Compass(遗留代码)的文档,但我不明白@SearchableComponent和prefix属性。有人可能会试图用自己的话来解释,而不提及文档的意思,以及如何使用它们?@SearchableComponent和前缀

+0

这实际上是否与地理位置有关,还是另一种指南针? – Ryan

+0

已编辑。谢谢:) – LuckyLuke

回答

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

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

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