使用Solrj可以从QueryResponse
作为(带注释的)bean读取文档:
List<Item> items = queryResponse.getBeans(Item.class)
其中Item是映射到Solr文档的带注释的类。
现在我查询单个文档并要求提供10个MoreLikeThis文档:
?q=id:AZ133007&mlt=true&mlt.fl=technique,subject&mlt.mindf=1&mlt.mintf=1&mlt.count=10
这将返回标识为AZ133007
的文档以及10&#39; MoreLikeThis&#39;文档(例如,更像AZ133007
关于字段&#39;技术&#39;主题&#39;)。请参阅下面的(简化)回复:
<response>
<lst name="responseHeader">
...
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="id">AZ133007</str>
<str name="title">Still I</str>
<str name="artist">A.R. Tist</str>
<str name="technique">Watercolor</str>
<str name="subject">Still life</str>
</doc>
</result>
<lst name="moreLikeThis">
<result name="AZ133007" numFound="84" start="0">
<doc>
<str name="id">AZ002001</str>
<str name="title">Cubes</str>
<str name="artist">John Doe</str>
<str name="technique">Watercolor</str>
<str name="subject">Landscape</str>
</doc>
<doc>
<str name="id">AZ002002</str>
<str name="title">Cats and Dogs</str>
<str name="artist">A. Nothername</str>
<str name="technique">Watercolor</str>
<str name="subject">Cityscape</str>
</doc>
...
</result>
</lst>
</response>
AZ133007
部分中请求的文档response
可以作为Item
bean返回,如下所示:
Item item = queryResponse.getBeans(Item.class).get(0);
但是我如何获得&#39; moreLikeThis&#39;下列出的文件?作为豆子?
答案 0 :(得分:0)
经过大量的实验,浏览网页并深入了解Solrj API后,我提出了以下解决方案。可能有更好的方法,我真的很想知道。
首先从回复中提取moreLikeThis
部分并将其投放到NamedList
:
NamedList mlt = (NamedList) queryResponse.getResponse().get("moreLikeThis");
在调试时检查NamedList
mlt
,它会显示AZ133007
条目以及更多类似的SolrDocuments。
{
AZ133007={
numFound=295,
start=0,
docs=[
SolrDocument{
id=AZ002001,
title=Cubes,
artist=JohnDoe,
technique=Watercolor,
subject=Landscape
},
SolrDocument{
id=AZ002002,
title=CatsAndDogs,
artist=A.Nothername,
technique=Watercolor,
subject=Cityscape
},
...
]
}
}
现在获取SolrDocumentList
提供ID:
SolrDocumentList mltDocList = (SolrDocumentList) mlt.get("AZ133007");
将此SolrDocumentList
绑定到bean:
DocumentObjectBinder b = new DocumentObjectBinder();
List<Item> similarItems = b.getBeans(Item.class, mltDocList);
当然我没有对id进行硬编码,而且我已经在一些空检查中构建了,但你明白了。