gpt4 book ai didi

json - Solr - 如何获取特定格式的搜索结果

转载 作者:行者123 更新时间:2023-12-03 06:35:00 26 4
gpt4 key购买 nike

在探索 indexing wikipedia data 的示例时在Solr中,我们怎样才能得到预期的结果(即与导入的数据相同)?

是否有任何过程可以通过配置而不是通过组查询来实现它,因为我的数据有很多内部标签。

我探索了 xslt 结果转换,但我正在寻找 json 响应。

导入的文档:

<page>
<title>AccessibleComputing</title>
<ns>0</ns>
<id>10</id>
<redirect title="Computer accessibility" />
<revision>
<id>381202555</id>
<parentid>381200179</parentid>
<timestamp>2010-08-26T22:38:36Z</timestamp>
<contributor>
<username>OlEnglish</username>
<id>7181920</id>
</contributor>
</revision>
</page>

solrConfig.xml:

<dataConfig>
<dataSource type="FileDataSource" encoding="UTF-8" />
<document>
<entity name="page"
processor="XPathEntityProcessor"
stream="true"
forEach="/mediawiki/page/"
url="data/enwiki-20130102-pages-articles.xml"
transformer="RegexTransformer,DateFormatTransformer"
>
<field column="id" xpath="/mediawiki/page/id" />
<field column="title" xpath="/mediawiki/page/title" />
<field column="revision" xpath="/mediawiki/page/revision/id" />
<field column="user" xpath="/mediawiki/page/revision/contributor/username" />
<field column="userId" xpath="/mediawiki/page/revision/contributor/id" />
<field column="text" xpath="/mediawiki/page/revision/text" />
<field column="timestamp" xpath="/mediawiki/page/revision/timestamp" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" />
<field column="$skipDoc" regex="^#REDIRECT .*" replaceWith="true" sourceColName="text"/>
</entity>
</document>
</dataConfig>

solr 查询响应:

  "response": {
"numFound": 1,
"start": 0,
"docs": [
{
"id": "10",
"timestamp": "2010-08-26T17:08:36Z",
"revision": 381202555,
"titleText": "AccessibleComputing",
"userId": 7181920,
"user": "OlEnglish"
}
]
}

预期响应:

"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"id": "10",
"timestamp": "2010-08-26T17:08:36Z",
"revision": 381202555,
"titleText": "AccessibleComputing",
"contributor": [{
"userId": 7181920,
"user": "OlEnglish"
}]
}
]
}

最佳答案

如果您不喜欢使用XsltResponseWriter的想法(这也可以帮助 int 以 JSON 格式输出结果),您可以创建自己的 SearchComponent,它将修改输出。当您使用自定义 SearchComponent 时,您可以将不同的 ResponseWriter 应用于输出(xml、json、csv、xslt 等)。

您可以在 this article 中了解如何创建自定义 SearchComponent ,例如。

要使用 XsltResponseWriter,请将此代码添加到 solrconfig.xml:

<queryResponseWriter name="xslt" class="org.apache.solr.response.XSLTResponseWriter"/>

json.xsl 文件添加到 conf/xslt 文件夹,其中包含 XML 输出的转换规则(当您使用 wt=xml 在您的查询中),如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:strip-space elements="*"/>
<xsl:output method="text" indent="no" media-type="application/json"/>

<xsl:template match="result">
<xsl:text>{"response":{"docs":[</xsl:text>
<xsl:apply-templates select="doc"/>
<xsl:text>]}}</xsl:text>
</xsl:template>

<xsl:template match="doc">
<xsl:if test="position() &gt; 1">
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:text>{"contributor": [{"userId": </xsl:text><xsl:value-of select="userId"/><xsl:text>, "user": "</xsl:text><xsl:value-of select="user"/><xsl:text>"}]}</xsl:text>
</xsl:template>

</xsl:stylesheet>

然后您可以使用如下网址获取此响应:

http://localhost:8983/solr/select/?q=id:10&wt=xslt&tr=json.xsl

关于json - Solr - 如何获取特定格式的搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307246/

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