知识点

相关文章

更多

最近更新

更多

solr 分页查询与高亮显示

2019-03-06 23:33|来源: 网路

1、分页查询

分页查询的时候,只对添加start和rows两个参数即可

@Test
public void testFind() throws SolrServerException {
    // 以后参数都是通过这个对象去构造...
    SolrQuery solrParams = new SolrQuery();
    solrParams.setQuery("name:书生");
    //分页
    solrParams.setStart(20);
    solrParams.setRows(10);
    QueryResponse queryResponse = solr.query(solrParams);
    // 返回结果,默认只返回10条记录
    SolrDocumentList documentList = queryResponse.getResults();
    for (SolrDocument solrDocument : documentList) {
        Object id = solrDocument.get("id");
        Object name = solrDocument.get("name");
        System.out.println(id);
        System.out.println(name);
    }
}


2、高亮显示
查询参数设置 setHighlight为true,开启高亮显示
查询参数中设置h ighlightSimplePre和highlightSimplePost对高亮结果进行处理,例如添加html标签方便页面高亮显示

对某个字段进行高亮,还要设置参数hl.fl为指定字段,如solrParams.setParam("hl.fl", "content");

可以通过queryResponse.getHighlighting只获取高亮的数据


@Test
public void testHighlight() throws SolrServerException{
    //以后参数都是通过这个对象去构造...
    SolrQuery solrParams=new SolrQuery();
    solrParams.setQuery("name:书生");
    //开启高亮
    solrParams.setHighlight(true);
    //高亮显示的格式
    solrParams.setHighlightSimplePre("<font color='red'>");
    solrParams.setHighlightSimplePost("</font>");
    //我需要那几个字段进行高亮
    solrParams.setParam("hl.fl", "content");
    QueryResponse queryResponse=solr.query(solrParams);
    //返回所有的结果...
    SolrDocumentList documentList=queryResponse.getResults();
    Map<String, Map<String, List<String>>> maplist=queryResponse.getHighlighting();
    //返回高亮之后的结果..
    for(SolrDocument solrDocument:documentList){
        Object id=solrDocument.get("id");
        Map<String, List<String>>  fieldMap=maplist.get(id);
        List<String> stringlist=fieldMap.get("content");
        System.out.println(stringlist);
    }
}


执行结果:

[<font color='red'>书</font><font color='red'>生</font>在学solr2]
[<font color='red'>书</font><font color='red'>生</font>在学solr3]
[<font color='red'>书</font><font color='red'>生</font>在学solr4]
[<font color='red'>书</font><font color='red'>生</font>在学solr5]
[<font color='red'>书</font><font color='red'>生</font>在学solr6]
[<font color='red'>书</font><font color='red'>生</font>在学solr7]
[<font color='red'>书</font><font color='red'>生</font>在学solr8]
[<font color='red'>书</font><font color='red'>生</font>在学solr9]
[<font color='red'>书</font><font color='red'>生</font>在学solr10]
[<font color='red'>书</font><font color='red'>生</font>在学solr11]


注:由于我使用默认分词器,所以对中文分词不太好


相关问答

更多
  • 我不知道为什么这不工作,但这是逻辑上相同的,它的工作: -(myField:superneat AND -myOtherField:somethingElse) 也许这与在查询中定义相同的字段两次有关 尝试在solr-user组中询问,然后在这里发回最后的答案! I don't know why that doesn't work, but this one is logically equivalent and it does work: -(myField:superneat AND -myOther ...
  • 对于深度分页,您应该使用游标,因为性能会因标准请求中的高start值而恶化: https : //cwiki.apache.org/confluence/display/solr/Pagination+of+Results 您当前的查询在技术上看起来很合理(虽然从性能角度来看很糟糕),并且您的索引只有numFound所述的10个文档。 For deep paging you should be using cursors as performance deteriorates with high value ...
  • 这些DB服务器的用途不同,它在很大程度上取决于您的应用程序(以及您存储的数据类型)是否应该仅使用Solr或MySQL。 MySQL可以很好地存储具有大量关系和表格的数据(彼此相关的表格)。 Solr很适合文本搜索(正如你所说:快速索引),如果你没有很多“相关数据”,你确实可以将这些数据存储在相同的文档中。 有些人确实只使用Solr来存储他们的数据库...但我仍然认为RDBM可以很好地用于某些类型的数据。 例如:如果您想允许快速搜索系统用户并存储他们的完整个人资料,以及一些信息详细信息......最好使用So ...
  • 如果你改变你的查询 http://localhost:8983/solr/collection1/select/?indent=on&q=*&fl=name,id&rows=1000000 rows=参数指定要返回的结果的数量。 值为1000000时,您将有效获取所有文档(不仅仅是前10个,这是默认值)。 如果您想要更谨慎一些,可以读取numFound参数,然后使用多次调用返回数据块 http://localhost:8983/solr/collection1/select/?indent=on&q=*& ...
  • 看看IBM 。 也许这会让你走上正确的道路。 结果数量:指定要返回的最大结果数量。 开始:在结果集中开始的偏移量。 这对分页很有用。 所以你可能想要一些变化 10 0 你的solr客户端应该提供一些方法来获得结果的总数,而不会有太多麻烦。 Take a look at IBM. Maybe that will get you on the right course. Number of results: Spec ...
  • 您在每个查询中都给出了参数rows=2147483647 。 该参数的含义是(取自参考文献) 您可以使用rows参数对查询中的结果进行分页。 该参数指定Solr应一次返回客户端的完整结果集中的最大文档数。 默认值为10.也就是说,默认情况下,Solr一次返回10个文档以响应查询。 因此,您告诉Solr生效,在单个响应中发送查询的所有匹配。 这是你糟糕表现的原因。 当查询“java”时 ,谷歌是否会向您发送所有500.000.000次匹配,不会。 为什么不,性能。 我知道的每一个IR应用程序都会为您提供一个带 ...
  • 首先,我认为Solr通配符比“1或多个”更好地归纳为“0或多个”。 我怀疑这是你问题的根源。 (例如,请参阅WildcardQuery的javadoc 。) 其次,你是否在使用词干,因为我的第一个猜测是你正在处理一个词干问题。 Solr通配符在词干方面可能表现得很奇怪。 这是因为通配符扩展是通过搜索存储在倒排索引中的术语列表来进行的; 这些术语将以词干形式出现(可能类似“gatorad”),而不是来自原始源文本(可能是“gatorade”或“gatorades”)的单词。 例如,假设你有一个词干分析器,把“ ...
  • 尝试使用hl.fragsize来增加由Solr返回的突出显示片段的大小。 Try hl.fragsize to increase the size of the highlighted snippet returned by Solr.
  • 除了新功能之外,Solr 3.6和Solr 4.0之间是否有任何重大差异? 我发现这个问题很奇怪,至少可以说。 错误修复和新功能是发布的全部内容! 您可以在此处查看 Solr版本的完整更新日志。 不要忘记Solr和Lucene是一致发布的,所以你还需要在两个项目中寻找相关的变化。 我可以安全地使用我在Solr 4.0中的现有查询(在Solr 3.6中工作的查询)吗? 查询应该没问题,但索引 - 可能不是。 引用另一篇SO帖子中的 javanna: 索引格式已更改,但Solr将负责升级索引。 一旦用旧索引启动 ...
  • 这里有一篇很好的文章将帮助您完成PHP和SOLR的集成: http://www.ibm.com/developerworks/opensource/library/os-php-apachesolr/ SOLR有许多PHP接口,该文章引用了PHP SOLR客户端: http://code.google.com/p/solr-php-client/ 但也有这个: http://pecl.php.net/package/solr There's a good article here that will hel ...