2009-04-10 94 views
3
类别

我正在使用Lucene商店搜索API。分组Lucene搜索结果和计算频率由

我需要显示其在括号频率每个城市,国家组合存储搜索结果....例如:

Los Angles,CA (450) 
Atlanta,GA (212) 
Boston, MA (78) 
. 
. 
. 

截至目前,我的搜索结果返回7000个左右Lucene的文档,就平均,如果用户说“给我看所有商店”。 在这个用例中,我最终显示了大约800个独特的城市,州记录,如上所示。

我重写HitCollector类的Collect方法和检索载体如下:

var vectors = _reader.GetTermFreqVectors(doc); 

然后,我通过这个集合迭代和计算频率为每一个独特的城市,国家组合。

但是,这是谈到了非常的性能非常缓慢...有分组搜索结果和Lucene的计算频率的任何更好的办法? 的代码段将是非常有益

另外,请建议,如果我可以使用任何其它技术/提示优化我的Lucene搜索代码....

感谢您的阅读!

回答

3

我不相信你可以在Lucene中做到这一点开箱即用当前 - 寻找此功能产量这个悬而未决的问题:

Jira Lucene Feature Request

的功能存在开箱即用的Solr但是 - 它提供了一个小面的特征。查询如以下几点:

http://localhost:8983/solr/select?q=ipod&rows=0&facet=true&facet.limit=-1&facet.field=cat&facet.field=inStock

将返回以下结果:

<response> 
<responseHeader><status>0</status><QTime>2</QTime></responseHeader> 
<result numFound="4" start="0"/> 
<lst name="facet_counts"> 
<lst name="facet_queries"/> 
<lst name="facet_fields"> 
    <lst name="cat"> 
     <int name="search">0</int> 
     <int name="memory">0</int> 
     <int name="graphics">0</int> 
     <int name="card">0</int> 
     <int name="music">1</int> 
     <int name="software">0</int> 
     <int name="electronics">3</int> 
     <int name="copier">0</int> 
     <int name="multifunction">0</int> 
     <int name="camera">0</int> 
     <int name="connector">2</int> 
     <int name="hard">0</int> 
     <int name="scanner">0</int> 
     <int name="monitor">0</int> 
     <int name="drive">0</int> 
     <int name="printer">0</int> 
    </lst> 
    <lst name="inStock"> 
     <int name="false">3</int> 
     <int name="true">1</int> 
    </lst> 
</lst> 
</lst> 
</response> 

上刻面的更多信息,Solr的网站上找到:

http://wiki.apache.org/solr/SimpleFacetParameters

编辑:如果你绝对不想下去的话SOLR形式给出到刻面则可以在Lucene的描述了本补丁利用的功能:

http://sujitpal.blogspot.com/2007/01/faceted-searching-with-lucene.html

,其提供通过贴剂Lucene的2.0的顶部上的刻面特征的实现。

+0

你能回答这个吗? http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests – 2009-06-12 02:44:37

0

我不确定我是否理解“分组”的含义,但如果您只想计算每个类别的文档数量,则应该查看this question

我的回答仍然矗立,坚韧似乎没有人喜欢它足以给予好评我...

0

史蒂夫,我相信你想faceted search。它不会与Lucene一起出现。 我建议你尝试使用SOLR,它具有faceting作为主要和方便的功能。

+0

你能回答这个吗? http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests – 2009-06-12 02:43:55