在我们的项目中,我们有一个 solr 模式,其中包含多个、接近重复的字段的值。我的意思是我们有一个示例字段Field,我们将其存储为field、field_w和field_l solr 并且它们各自在搜索中具有不同的提升因子(动态类型不是 _w 或 _l 但类似)。
因此,我们有一个 模型,我们通过自定义代码将其映射到 SolrSchemaModel,然后将其存储在 Solr 中。当我们从 Solr 读取数据时,我们会读取 SolrDocumentList (不是 SolrSchemaModel,因为它嵌入了读取时映射到 __childDocuments__ 的文档)并构造一个 < strong>ModelSearchResponse(不是模型,因为它缺少字段)。
正如您所看到的,每当我们想要向
其他人如何使用 Solr 处理持久性?一种流行的想法是将类的 JSON 序列化为 Solr 字段,这样只要模式或模型发生变化,写入就会发生变化,并且序列化/反序列化保持不变。另一个人建议不要使用 Solr 作为持久性,只需要一些单独的东西(我猜这意味着在返回结果之前执行搜索后在另一个数据库上执行读取)。
人们是如何解决这个问题的?如果相关的话,将 Java 8 与 SolrJ 结合使用。
最佳答案
这里有几件事:
- 如果您要将字段复制到其他字段以进行不同的分析,则无需存储其他字段,只需对它们建立索引即可。因此,您只需要在 Solr 级别copyField它们,而不需要更改您的序列化模型。
- 处理不需要跟踪模式等效性的经典方法是在指示类型的名称中带有前缀或后缀的动态字段。因此,所有 *_s 字段都是字符串,所有 *_d 字段都是日期。您的映射器甚至可能会自动添加后缀/取消后缀。这就是大多数 CMS 在与 Solr 交互时使用的方式。
- copyField 支持源字段和目标字段的通配符,因此您仍然可以结合使用上述技术。
关于java - 如何编写可维护的 Solr 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978858/