java - 是否可以在 Solr 中创建一个多值多字段,以允许在查询时自定义逻辑?

标签 java search solr lucene

我正在处理一个相当小的需求,在 Solr 中对关系结构进行建模,并认为自定义多域将是解决我的问题的最合适的解决方案。简而言之,索引中的每条记录都会有多个禁运日期和到期日期,以便内容在何时被视为“可用”。这些日期按照另一种分类(假设按设备)进行分组,因此,例如,索引中的任何给定项目可能对两个日期之间的移动用户可用,但仅对另外两个日期之间的桌面用户可用。

与货币和 latlon 类型非常相似,我会将值索引为表示每个可用性窗口的逗号分隔列表,例如:

mobile,2013-09-23T00:00:00Z,2013-09-30T00:00:00Z 

因此,单个索引记录可能如下所示

{
    id: "1234",
    text: ["foobarbaz"],
    availability: [
        "mobile,2013-09-23T00:00:00Z,2013-09-30T00:00:00Z",
        "pc,2013-09-22T00:00:00Z,2013-09-30T00:00:00Z"
    ]
}

自定义类型将完成解析传入值并相应存储它的工作。这是一个可行的解决方案吗?我将如何处理查询时所需的自定义逻辑以按设备进行过滤,然后确保 NOW 在提供的日期内?

到目前为止,我的尝试是基于货币字段类型,但现在我已将其恢复为仅将字符串存储在未解析的状态。如果我能够在使用多场功能之前证明我想要的过滤是可能的,那么我就会知道是否值得继续。

还有其他人有编写自定义(多)字段的经验,或者做与我正在做的类似的事情吗?

谢谢!

最佳答案

如果您希望能够在这些范围内进行过滤和搜索,我认为您不会很幸运地存储这样的记录。对我来说,拥有一个更加结构化的文档会更有意义,例如:

id: "1234",
text: ["foobarbaz"],
mobileavailabilitystart: "mobile,2013-09-23T00:00:00Z",
mobileavailabilityend: "2013-09-30T00:00:00Z",
pcavailabilitystart: "2013-09-22T00:00:00Z", 
pcavailabilityend: "2013-09-30T00:00:00Z"

在 Lucene/Solr 中的单个字段中索引 csv 行的完整内容将允许您对其执行全文搜索,但不是支持查询其中特定元素的好方法。

关于java - 是否可以在 Solr 中创建一个多值多字段,以允许在查询时自定义逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855026/

相关文章:

python - 如何让 PySolr 断开连接?

java - Tomcat + Servlet + Solr 国际字符不正确

java - 压缩间隔列表

java - 从 recyclerview 中的 editText 进行搜索,我使用改造从 API 获取项目

java - 在 Java Swing 中等待鼠标输入

excel - 通过电子邮件搜索将 Excel 2003 中的数据行复制并粘贴到不同的工作表

javascript - node.js 如何在字符串中搜索数组中的值

java - 当我在字段类型中添加 "spatialContextFactory"属性时,Solr Core 未加载

使用python脚本进行javan安装

java - 如何创建具有条件返回类型的类方法