我正在尝试在Solr中设置字段以进行复杂搜索。
我希望用户能够根据他们在一天和一段时间内提供的营业时间和服务来查找组织。
示例:Find all organizations open Monday at 3pm offering childcare service and Spanish speakers.
字段是:
- day of week open (long)
- open time (long)
- close time (long)
- services offered (long)
- languages spoken (long)
我知道我可以使用带有范围查询的数组字段来搜索任何一个字段,但我不确定如何关联相关数据。如果只在周三提供托儿服务,我不希望该组织在搜索星期一时出现。
答案 0 :(得分:2)
这很大程度上取决于您需要什么样的查询。通常,不可能只从一个示例查询设计整个模式,但这是一个开始:
name: string/text
services: multiValued string
languages: multiValued string
opentime: multiValued string
servicestime: multiValued string
示例文件:
name: Foo org
services: childcare, something_else
languages: English, Spanish
opentime: Monday 9AM, Monday 10AM, ..., Monday 4PM, Tuesday 9AM, ..., Tuesday 4PM
servicestime: childcare Monday 9AM, ..., childcare Monday 12PM
您的示例查询:“查找所有在周一下午3点开放的提供托儿服务和西班牙语发言人的组织”可以转换为此模式:servicestime:"Monday 3PM" AND languages:Spanish
(暗示如果它在周一下午3点提供服务,则该组织是打开)。
通常,在设计Solr架构时,您将拥有特定于场景的字段。请记住,它不是关系数据库,您的数据应该非规范化。