Solr查询 - 是否有办法限制响应中文本字段的大小

时间:2011-01-25 11:16:22

标签: full-text-search solr

有没有办法限制查询中文本字段中的文本数量?这是一个快速的场景......

我有两个字段:

  • docId - int
  • text - string。

我将查询docId字段,并希望从200个字符的文本字段中获取“预览”文本。平均而言,文本字段有600-2000个字符,但我只需要预览。

例如。 [mySolrCore] /选择Q =的docId:123安培; FL =文本

有没有办法做到这一点,因为如果我只需要一个小预览,我没有看到带回整个文本字段的重点?

我不是在看热门高亮,因为我没有在文本字段中搜索特定文本,但是如果hl.fragsize参数有类似的功能,那就太棒了!

希望有人能指出我正确的方向!

干杯!

5 个答案:

答案 0 :(得分:4)

您必须测试此解决方案的性能,而不仅仅是返回整个字段,但它可能适用于您的情况。基本上,在不匹配的字段上打开突出显示,然后使用备用字段返回所需的有限字符数。

http://solr:8080/solr/select/?q=*:*&rows=10&fl=author,title&hl=true&hl.snippets=0&hl.fl=sku&hl.fragsize=0&hl.alternateField=description&hl.maxAlternateFieldLength=50

注意:

  • 确保字段列表(fl)参数
  • 中不存在备用字段
  • 确保您的突出显示字段(hl.fl)实际上不包含您要搜索的文字

我发现运行荧光笔的cpu成本有时高于cpu成本和返回整个字段的带宽。你必须要做实验。

答案 1 :(得分:3)

我决定将我的评论转为答案。

我建议您不要将文本数据存储在Solr / Lucene中。仅索引数据以进行搜索并存储唯一ID或URL以标识文档。应从单独的存储系统中获取文档的内容。

Solr / Lucene针对搜索进行了优化。它们不是您的数据仓库或数据库,不应该以这种方式使用它们。当您在Solr中存储的数据超过必要时,会对整个搜索系统产生负面影响。膨胀索引的大小,增加主服务器和从服务器之间的复制时间,复制只需要单个副本的数据,并在文档缓存上浪费缓存内存,以便更快地进行搜索。

所以,我会建议两件事。

首先,最佳地从搜索索引中删除整个文本存储。从优化用于保存文档的辅助系统(如文件服务器)中获取预览文本和整个文本。

其次,次优,仅将预览文本存储在搜索索引中。将整个文档存储在其他位置,例如文件服务器。

答案 2 :(得分:0)

你可以添加一个额外的字段,例如excerpt / summary,它包含文本中的前200个字符,然后返回该字段

答案 3 :(得分:0)

我怀疑,许多网站都赞同我的愿望,就是在每个查询响应中提供一小段文字。这可以升级用户从单纯的标题或同等标题中看到的内容。这是正常的(以Google为例)和富有成效的技术。  目前,我们无法轻松应对将Solr / Lucene的整个内容体发送到Web演示程序并在那里创建片段,以及一组响应中的许多其他内容,因为这是一个重要的网络,CPU和内存耗尽(想想处理许多多MB文件。)

理所当然的是,Solr / Lucene可以根据请求控制仅发送前N个字节的内容,从而在现场省去了很多麻烦。带有高光等的Kludges就是这样,并干扰正确使用。我们记住,将材料送入Solr / ucene的机制可能无法解析文件,因此这些馈送器无法创建片段。

答案 4 :(得分:-2)

Linkedin实时搜索 http://snaprojects.jira.com/browse/ZOIE

用于存储大数据 http://project-voldemort.com/