我刚刚开始使用 Solr 和 SolrNet。在我目前的项目走得太远之前,我想验证我是否走在正确的轨道上。这是我想要实现的目标:
基本要求:
- 提供针对多个实体(汽车、船舶、飞机、自行车等)进行搜索的搜索解决方案。我只是在这里做了这些。每个实体可以具有可变数量的非对称数据字段。
- 为每个实体提供方面。
- 为每个实体提供过滤器。
工作流程:
- 用户使用术语进行搜索。
- 四个链接,每个实体一个,旁边显示一个数值,表示每个实体的命中数。
- 用户单击链接,页面将显示该实体的构面和搜索结果。
因此,鉴于这一要求,这是我迄今为止所做的:
- 创建了一个索引,但每个实体都有特定的字段,例如 car_name、car_model、car_company、ship_name、ship_model、ship_company、ship_age、ship_size 等。
- 我在索引中有一个字段 entity_type,它设置为实体之一。
- ID 在所有实体中都是唯一的。
- 我有一个 DisMax 搜索处理程序 solrconfig.xml,我在其中放置了应该搜索的所有字段(来自所有实体)。
这是我的 DisMax 搜索处理程序的样子:
<requestHandler name="DisMax" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<str name="qf">
car_name car_company car_model ship_name ship_company ship_model ship_sailing_route plane_name plane_company plane_model bicycle_name bicycle_company bicycle_model
</str>
<str name="q.alt">*:*</str>
<str name="rows">10</str>
<str name="fl">*,score</str>
<str name="facet">on</str>
<str name="facet.field">car_comapny</str>
<str name="facet.field">car_model</str>
<str name="facet.field">ship_name</str>
<str name="facet.field">ship_company</str>
<str name="facet.field">ship_sailing_route</str>
...
</lst>
</requestHandler>
最后,这是我的问题:
- 这个单一索引路线是正确的方法还是应该为每个实体创建单独的索引?请解释。
- 如果它们应该是单独的索引,我如何在它们中搜索给定的术语?重要的是我如何使用 SolrNet 做到这一点?
- 有没有办法使用 SolrNet 搜索所有实体并检索结果?或者我是否需要使用相同的搜索词分别(可能并行)对每个实体执行查询?
- 如您所见,我有一个应在 DisMax 处理程序中作为构面可用的所有字段的列表,这是正确的方法吗?如果不是,那是什么?
我确信在我完成我的项目时我会有更多的问题,但现在就可以了。