gpt4 book ai didi

xml - 具有规范化文档结构的 Solr

转载 作者:数据小太阳 更新时间:2023-10-29 01:48:32 26 4
gpt4 key购买 nike

我有一个这样的 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>

我们希望对其进行规范化,并为个人、国家和类别设置单独的文档类型。

<doc>
<int name="PId">7</int>
<str name="Name">PersonName</str>
<str name="Address">Address Line 1, Address Line 2, 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>

请注意,我只是在简化示例,我使用的实际文档比这复杂得多,我们的索引中有数百万个文档。

我想了解,如何使用这种文档结构进行连接和过滤查询。与之前的情况相比,它对性能有何影响,在之前的情况下,所有详细信息都存储在单个文档结构中。

更新

具有当前结构的示例查询,希望这有助于了解当前是如何完成的:

这是应用了某些方面的搜索示例查询 -

/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

这个带有分面的过滤器查询:

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\!!4!!&fq={!tag%3Dpa_OS}pa_OS:Apple\!!0!!&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 文件修改查询响应,将响应转换为更合适的响应。

不知道是不是你想要的。

编辑:我将添加更多相关信息。

所以 XSLT 允许您将一个 XML 文件转换为另一个(或另一个)文件。您可以交换标签的位置、创建新标签、合并它们、从其他 XML 获取信息并将其用于要转换的文件等。您可以在此处找到更多相关信息:https://www.w3schools.com/xml/xsl_intro.asp

Solr 允许您在查询时对查询结果应用 XSLT 转换。您只需要创建您的 .xsl 文件并将其放入 mySolrCollection/conf/xslt/ 目录(如果没有则创建 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"/select?q=*:*&wt=xslt&tr=tranformation.xsl&rows=100&...

如果您的查询是正确的,您将按照您在 .xsl 文件中指定的方式转换您的响应。

希望这足够了。

关于xml - 具有规范化文档结构的 Solr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38328516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com