动态检索 Solr 文档中存在的所有字段
Dynamically retrieve all fields present in Solr documents
是否可以动态检索一组 Solr 文档中存在的所有字段并仍然保持合理的性能?这里的最终目标是动态填充数字字段列表,供用户对当前查询进行排序。
在一个完美的世界中,我希望能够让这个列表包含用户查询返回的文档中存在的所有数字字段。
不过,如果这不可能实现,我将通过 luke 处理程序用数字字段填充列表。不幸的是,似乎整个集合的 luke 处理程序 returns 字段,但不能仅限于当前查询。
我是 Solr 的新手,所以任何 help/discussion 将不胜感激!
这就是我解决问题的方法:
- 向架构添加新字段:
SORT_DOC_FIELDS
和 NO_SORT_DOC_FIELDS
。
- 使用 ScriptUpdateProcessor 编写了一些 JavaScript 来确定是否可以根据多个条件对字段进行排序(例如,不是多值,不是类型
tdate
或 string
).如果可以排序,我将它添加到该文档的 SORT_DOC_FIELDS
字段中;如果没有,我将其添加到 NO_SORT_DOC_FIELDS
字段。
- 每当我想检索查询中存在的字段时,我都会将
&facet=true&facet.field=SORT_DOC_FIELDS&facet.field=NO_SORT_DOC_FIELDS&facet.limit=-1
添加到查询字符串中。
性能还可以。我有一个包含 3000 万个文档的索引,进行查询和获得响应,往返大约需要 2 秒。
是否可以动态检索一组 Solr 文档中存在的所有字段并仍然保持合理的性能?这里的最终目标是动态填充数字字段列表,供用户对当前查询进行排序。
在一个完美的世界中,我希望能够让这个列表包含用户查询返回的文档中存在的所有数字字段。
不过,如果这不可能实现,我将通过 luke 处理程序用数字字段填充列表。不幸的是,似乎整个集合的 luke 处理程序 returns 字段,但不能仅限于当前查询。
我是 Solr 的新手,所以任何 help/discussion 将不胜感激!
这就是我解决问题的方法:
- 向架构添加新字段:
SORT_DOC_FIELDS
和NO_SORT_DOC_FIELDS
。 - 使用 ScriptUpdateProcessor 编写了一些 JavaScript 来确定是否可以根据多个条件对字段进行排序(例如,不是多值,不是类型
tdate
或string
).如果可以排序,我将它添加到该文档的SORT_DOC_FIELDS
字段中;如果没有,我将其添加到NO_SORT_DOC_FIELDS
字段。 - 每当我想检索查询中存在的字段时,我都会将
&facet=true&facet.field=SORT_DOC_FIELDS&facet.field=NO_SORT_DOC_FIELDS&facet.limit=-1
添加到查询字符串中。
性能还可以。我有一个包含 3000 万个文档的索引,进行查询和获得响应,往返大约需要 2 秒。