Performance 将Lucene搜索结果分组并按类别计算频率
我正在使用Lucene开发商店搜索API 我需要显示每个城市的店铺搜索结果,括号中的州组合及其频率…例如:Performance 将Lucene搜索结果分组并按类别计算频率,performance,lucene,lucene.net,Performance,Lucene,Lucene.net,我正在使用Lucene开发商店搜索API 我需要显示每个城市的店铺搜索结果,括号中的州组合及其频率…例如: Los Angles,CA (450) Atlanta,GA (212) Boston, MA (78) . . . 到目前为止,如果用户说“显示所有商店”,我的搜索结果平均返回大约7000个Lucene文档。 在这个用例中,我最终展示了800条独特的城市、州记录,如上图所示 我重写了类的Collect方法并检索向量,如下所示: var vectors = _reader.GetTerm
Los Angles,CA (450)
Atlanta,GA (212)
Boston, MA (78)
.
.
.
到目前为止,如果用户说“显示所有商店”,我的搜索结果平均返回大约7000个Lucene文档。
在这个用例中,我最终展示了800条独特的城市、州记录,如上图所示
我重写了类的Collect
方法并检索向量,如下所示:
var vectors = _reader.GetTermFreqVectors(doc);
然后我迭代这个集合并计算每个独特的城市、州组合的频率
但这在性能上非常缓慢…在Lucene中有没有更好的方法来分组搜索结果和计算频率?
一段代码片段将非常有用
另外,请建议我是否可以使用任何其他技术/技巧优化我的Lucene搜索代码
谢谢你的阅读 我认为你目前无法在Lucene中实现OOTB-搜索此功能会产生以下问题: 不过,Solr提供了OOTB的功能,它提供了一个刻面特性。如以下所示的查询: 将返回以下结果:
<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>
02
0
0
0
0
1.
0
3.
0
0
0
2.
0
0
0
0
0
3.
1.
有关镶嵌面的更多信息,请访问Solr网站:
编辑:如果您确实不想继续使用刻面技术,您可以利用此补丁中为Lucene介绍的功能:
它通过一个补丁在Lucene 2.0之上提供了刻面功能的实现 我不确定我是否理解你所说的“分组”是什么意思,但如果你只是想计算每个类别的文档数量,你应该看看 我的答案仍然站在那里,强硬的人似乎没有人喜欢它足够的投票给我…史蒂夫,我相信你想要的。它不是由Lucene提供的。
我建议您尝试使用,这是一个主要且方便的功能。您能回答这个问题吗?你能回答这个问题吗?