Solr和SolrNet问题与指导
我刚刚开始学习Solr和SolrNet。在我对目前的项目做得太多之前,我想确认一下我是否在正确的轨道上。以下是我努力实现的目标: 基本要求:Solr和SolrNet问题与指导,solr,solrnet,Solr,Solrnet,我刚刚开始学习Solr和SolrNet。在我对目前的项目做得太多之前,我想确认一下我是否在正确的轨道上。以下是我努力实现的目标: 基本要求: 提供一个搜索解决方案,搜索多个实体(汽车、轮船、飞机、自行车等),我刚刚在这里编写了这些。每个实体都可以有不同数量的字段,其中包含非对称数据 为每个实体提供面 为每个实体提供过滤器 工作流程: 用户使用术语进行搜索 显示四个链接,每个实体一个,旁边有一个数值,指示每个实体的点击数 用户单击一个链接,页面将显示该实体的面和搜索结果 鉴于这一要求,以下是我迄今
<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>
明确的
埃迪斯马克斯
汽车名称汽车公司汽车模型船名称船公司船模型船航行路线平面名称飞机公司飞机模型自行车名称自行车公司自行车公司自行车模型
*:*
10
*,得分
在…上
汽车公司
汽车模型
船名
船务公司
船舶航行航线
...
最后,这里是我的问题:
我相信在我完成我的项目时,我会有更多的问题,但现在这就足够了。如果你打算每种类型有很多项目,拆分可能是一个明智的想法(只是为了性能,而不是其他)。这还取决于你在模式中使用的东西之间的相似性和差异性。
例如,自行车、汽车、轮船都有共同的公司、名称、型号等,因此您可以只有名称、型号、公司字段,然后是另一个显示“车辆类型”的字段。 如果变量字段(称为optionals)只是少数几个,则可以为这些字段设置动态字段,因此不需要严格的模式 如果使用不同的索引(和模式),则查询需要知道所有不同的字段和模式。更不用说,要实现这一点,您需要一个多核实例,并且(AFAIK)您不能同时向多个核发送查询 这取决于您要执行的查询。假设您想要搜索名为“vairo”的车辆,但用户没有指定他想要的是双座车还是汽车或其他什么。您需要将搜索分发到所有不同的核心,如
/solr/bicicles/select?q=bicicle_name:vairo
/solr/cars/select?q=car_name:vairo
/solr/ships/select?q=ship_name:vairo
然后合并结果。
如果您将所有内容都放在一个索引中,只需搜索q=name:vairo
。然后,通常你会以“vehicle_type”来表示,告诉用户有1000辆同名的双座车,还有很少的其他车辆。如果用户现在指定“确定,只给我两辆车”,则与以前一样保留查询,但添加&fq=vehicle\u type:bicicle
这比根据过滤器处理应该查询到的索引的逻辑要方便得多。
此外,合并来自多个响应的结果也不是一件小事
在我们公司,所有类别都使用单一solr。显然,他们都有其他人没有的选择(想想房地产和汽车)。有些是用动态字段处理的,有些是用普通字段处理的。如果您没有在文档中发送内容,SOLR是可以的
例如:
squared_meters
rooms
vehicle_type
vehicle_doors
都在一个索引中。正如您可能猜到的,当我们索引一个文档时,超过一半的字段将是空的(要么是一辆车,要么是一栋房子)。SOLR在查询和索引时都完全可以这样做
总而言之:
- 考虑您希望执行哪种查询。如果您搜索自行车或汽车,则可以使用不同的索引
- 考虑一下您将拥有多少文档。如果它们的数量将达到数百万,那么这种逻辑分割将是获得更好性能所能做的最好的事情,但您必须进行更多的查询李>