我将solr视为文档集合的搜索引擎,我们事先并不知道文档中数据项的类型。这可能吗?好的,这可能是泥浆,所以这里就是一个例子。
用户可以动态创建文档类型。因此,他们可以为拥有字段 name (文本字符串), age (非负数)和性别的人创建文档类型(布尔值)。另一个用户可能会为具有 make (文本字符串), enginesize (非负数)和 neworused (a)的汽车创建另一种文档类型布尔值)。
我们可以使用 whoosh (python搜索引擎)通过为每种文档类型创建单独的whoosh模式来处理这个问题,因此我们为第一个文档类型指定了字段的模式要被索引的对象以及相应的whoosh数据类型(我们可以在以后不再需要时销毁该模式)。
我可以用solr做这样的事吗?顺便说一句,更改schema.xml以添加新的字段类型不是一个选项:文档类型是完全动态的,它们的字段可能在创建后发生变化,并且可能有成千上万个。
希望这是有道理的!这可能完全是微不足道的,所以请接受Solr noob的道歉。
答案 0 :(得分:1)
在Solr中,动态字段已经支持了很长时间。事实上,如果您查看示例(例如techproducts),您将看到_s,_ss等动态字段定义。
因此,您只需使用后缀(或前缀)命名您的字段以指明类型,它就可以正常工作。
下一个问题是您搜索的字段。在示例模式中,通过将所有这些复制到通用字段并使用它来完成,但它不太灵活。
您可能希望使用eDisMax并明确指定字段列表。或者,使用 - recent - Config API动态保存这些字段列表。
答案 1 :(得分:0)
如果我在你的位置,我可能会使用solr的 Schemaless模式。在此,除了id(可选)和版本字段之外,您无需为文档提供完整的架构。您需要在ManagedIndexSchemaFactory
中使用schemaFactory
作为solrconfig.xml
。当文档被索引时,这将继续将字段添加到schema.xml
。您需要在/update
的{{1}} requestHandler 中添加其他更新链。使用以下来源获取更多信息。