xml – 具有规范化文档结构的Solr
我有一个像这样的Solr文档,其中所有字段都映射为单个文档.
<doc> <int name="Id">7</int> <str name="Name">PersonName</str> <str name="Address">Address Line 1,Address Line 2,City</str> <str name="Country">India</str> <str name="ImageURL">0000028415.jpeg</str> <arr name="Category"> <str>Student</str> <str>Group A</str> </arr> </doc> 我们希望对其进行规范化,并为Person,Country和Category分别提供doc类型. <doc> <int name="PId">7</int> <str name="Name">PersonName</str> <str name="Address">Address Line 1,City</str> <str name="CountryId">91</str> <str name="ImageURL">0000028415.jpeg</str> <arr name="CategoryId"> <str>2</str> <str>5</str> </arr> </doc> <doc> <int name="CId">91</int> <str name="CountryName">India</str> </doc> <doc> <int name="CatId">2</int> <str name="CategoryName">Student</str> </doc> 请注意,我只是简化了示例,我使用的实际文档比这复杂得多,并且索引中有数百万个文档. 我想了解,如何使用这种文档结构加入并进行过滤查询.与之前的情况相比,它如何影响性能,其中所有细节都存储在单个doc结构中. 更新 具有当前结构的示例查询,希望这有助于了解当前如何完成它: 以下是应用了某些方面的搜索示例查询 – /select?indent=on&wt=json&facet.field={!ex%3DCategory}Category&facet.field=Manufacturer&facet.field=Vendor&facet.field=f_Hardrive&facet.field=f_Operating%2BSystem&facet.field=f_Memory&facet.field=f_CPU%2BType&facet.field=f_Screensize&facet.field=pa_OS&bf=&start=0&fq={!tag%3DCategory}Category:Notebooks&fq=Price:[0+TO+9999999999999]&rows=6&version=2.2&bq=&facet.query=AverageRating:[4+TO+5]&facet.query=AverageRating:[3+TO+5]&facet.query=AverageRating:[2+TO+5]&facet.query=AverageRating:[1+TO+5]&q=(laptop)&defType=edismax&spellcheck.q=(laptop)&qf=Name^7++ShortDescription^6++FullDescription^4+CategoryCopy^2+ManufacturerCopy^2+Sku^3+ChildSku^3+nGramContent+Attributes+ProductAttributes+Tag+ManufacturerPartNumber+CustomProperties&spellcheck=true&stats=true&facet.mincount=1&facet=true&spellcheck.collate=true&stats.field=Price 这个带有facets的过滤器查询: select?indent=on&wt=json&facet.field=f_Hardrive&facet.field=f_Operating%2BSystem&facet.field=f_Memory&facet.field=f_CPU%2BType&facet.field={!ex%3Df_Screensize}f_Screensize&facet.field=pa_HDD&facet.field=pa_OS&facet.field={!ex%3Dpa_OS}pa_OS&facet.field=pa_OS&facet.field=pa_Processor&facet.field=pa_RAM&facet.field=pa_Software&facet.field=Vendor&facet.field={!ex%3DManufacturer}Manufacturer&facet.field=Category&start=0&fq=StockAvailability:(true)&fq={!tag%3Df_Screensize}f_Screensize:15.0%2527%2527!!!!&fq={!tag%3Dpa_OS}pa_OS:Apple!!!!&fq={!tag%3DPrice}Price:[594+TO+1800]&sort=CDO_1+asc&rows=6&version=2.2&facet.query=AverageRating:[4+TO+5]&facet.query=AverageRating:[3+TO+5]&facet.query=AverageRating:[2+TO+5]&facet.query=AverageRating:[1+TO+5]&q=CategoryID:(1+OR+2+OR+3+OR+4)&defType=edismax&spellcheck=true&stats=true&facet.mincount=1&facet=true&spellcheck.collate=true&stats.field=Price
我唯一想到的是使用XSLTResponseWriter来修改查询响应,使用XSLT文件以更合适的方式转换响应.
>检查:https://wiki.apache.org/solr/XsltResponseWriter 不知道那是不是你想要的. 编辑:我将添加更多关于此的信息. 因此,XSLT允许您将XML文件转换为另一个(或其他).您可以交换标签的位置,创建新标签,组合它们,从其他XML获取信息并在要转换的文件中使用它等. Solr允许您在查询时将XSLT转换应用于查询结果.您只需创建.xsl文件并将其放在mySolrCollection / conf / xslt / dicrectory中(如果它不存在,则创建xslt /).例如:mySolrCollection / conf / xslt / transformation.xsl 此文件(transformation.xsl)将包含要应用于查询响应的所有转换.我不会去研究如何编写这种转换,这并不难学,所以你只需要在网上查看示例和教程;) 最后要做的是告诉Solr您希望将转换应用于查询的响应,并且必须通过更改查询语法来实现.您必须将& wt = xslt& tr = transformation.xsl部分添加到查询中,以告诉Solr您要将转换应用于响应,并且该转换是在transformation.xsl中定义的 查询的示例应该是: HTTP://< your_host>:< your_port> / solr的/ “your_collection”/选择Q = *:*&安培;重量= XSLT&安培; TR = tranformation.xsl&安培;行数= 100安培; … 如果您的查询正确,您将按照.xsl文件中的指定转换响应. 希望这足够了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |