在探索indexing wikipedia data的示例时 在Solr中,我们如何获得预期的结果(即与导入的数据相同)?
是否有任何进程可以通过配置而不是组查询来实现,因为我有大量内部标记的数据。
我探索了xslt结果转换,但我正在寻找json响应。
导入doc:
<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"
}]
}
]
}
答案 0 :(得分:2)
如果你不喜欢使用XsltResponseWriter(它可以帮助用JSON输出结果),你可以创建自己的SearchComponent
,它将修改输出。当您使用自定义SearchComponent
时,您可以将不同的ResponseWriters应用于输出(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() > 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