在Solr中避免两个查询

时间:2014-04-15 10:49:05

标签: java solr lucene solrj

最近,我问了一个关于如何检索所有术语的docid(倒排索引)的问题。请参阅this question

现在使用查询

http://localhost:8983/solr/terms?terms.fl=tags&terms.sort=index


    <response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">2</int>
</lst>
<lst name="terms">
<lst name="tags">
<int name="AbRam">2</int>
<int name="Amitabh">2</int>
<int name="Anjaam">2</int>
<int name="Aryan">2</int>
<int name="Baazigar">2</int>
<int name="Bachchan">2</int>
<int name="Barry">2</int>
<int name="Biography">2</int>
<int name="Bollywood">2</int>
<int name="Chakde">2</int>
</lst>
</lst>
</response>

现在,为了找出所有这些术语的文档ID,我将使用solrj搜索solr-index。我当然确定我不需要查询两次,但找不到任何其他解决方案。是否可以使用Lucene库(我试图使用Lucene访问solr索引,看看我是否可以检索与所有术语相对应的docids。)

1 个答案:

答案 0 :(得分:0)

我对此并不完全确定,但我最近也尝试了这一点,并且不相信这可以通过开箱即用的术语组件实现。有关详情,请按this链接。

它说它直接使用Lucene的TermEnum迭代术语词典。我认为你可以尝试深入研究源代码并构建一个可以完成你想要完成的组件(我也看过你之前的帖子)。

我自己从来没有深入研究Solr的源代码,但是看一些API页面,它应该相当容易。使用TermEnum,您可以轻松访问所有条款。通过这些Terms,访问它们所属的文档应该相当容易。(请注意,这纯粹是假设的,我在Solr源代码中没有编码扩展的任何表达式)