solr同一个条件查询,为啥第一次能查询出来,第二次却查询不出来,但第三次又能查询出来了这是为啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr同一个条件查询,为啥第一次能查询出来,第二次却查询不出来,但第三次又能查询出来了这是为啥?相关的知识,希望对你有一定的参考价值。
查询代码:
SolrQuery query = new SolrQuery(content);
List<Files> list=new ArrayList();
//分页设置
// query.setStart((page.getPageIndex()-1)*page.getPageNumber());
// query.setRows(page.getPageNumber());
//排序
// query.setSort("issueDate", ORDER.desc);
//设置高亮
query.setHighlight(true);
// hl.fl参数表示哪个几Field关键字段高亮
query.setParam("hl.fl", "contentName,contentValue");
query.setHighlightSimplePre("<font color=red>");
query.setHighlightSimplePost("</font>");
query.setStart((page.getPageIndex())*page.getPageNumber());
query.setRows(page.getPageNumber());
// query.setHighlight(true)
// .setHighlightSimplePre("<font color='red'>")
// .setHighlightSimplePost("</font>")
// .setStart((page.getPageIndex())*page.getPageNumber())
// .setRows(page.getPageNumber())
// .setParam("hl.fl", "text");
//获取结果
QueryResponse response = SolrContext.getServer().query(query);
SolrDocumentList results = response.getResults();
//设置总数
page.setRecordCount((int)results.getNumFound());
//组装高亮结果
for (SolrDocument sd: results)
Files ct=new Files();
ct.setFile_id((String)sd.getFieldValue("id"));
if(sd.getFieldValue("contentName")!=null && !"".equals(sd.getFieldValue("contentName")))
ct.setFile_name((String)sd.getFieldValue("contentName"));
if(sd.getFieldValue("contentValue")!=null && !"".equals(sd.getFieldValue("contentValue")))
ct.setContent((String)sd.getFieldValue("contentValue"));
ct.setRelease_date((String)sd.getFieldValue("issueDate"));
if(response.getHighlighting().get(sd.getFieldValue("id"))!=null)
if(response.getHighlighting().get(sd.getFieldValue("id")).get("contentName")!=null
&& !"".equals(response.getHighlighting().get(sd.getFieldValue("id")).get("contentName"))
)
ct.setFile_name(response.getHighlighting().get(sd.getFieldValue("id")).get("contentName").get(0));
if(response.getHighlighting().get(sd.getFieldValue("id")).get("contentValue")!=null
&& !"".equals(response.getHighlighting().get(sd.getFieldValue("id")).get("contentValue"))
)
ct.setContent(response.getHighlighting().get(sd.getFieldValue("id")).get("contentValue").get(0));
list.add(ct);
return list;
感觉像是不能用submit提交,只能用onclick时间提交
追答那就用onClick提交呗,,,,,添加个js事件。。
solr多条件查询
1.昨天记了一下三条件的“并且” “并且”( && && )的情况,今天再来记一下 “并且” “或者” 的情况。
这里的或者情况,一定要搞清楚无论有多少情况,只要“或者”出现,他的级别和第一个输入框的级别是一样的,如果我们把查询的条件语句分一下级别,
第一个输入框为solrSQL(主查询语句);
第二个输入框为solrFQ1(子查询语句1);
第三个输入框为solrFQ2(子查询语句2);
级别:solrSQL > solrFQ1 > solrFQ2
这样分一下级别很清楚了,方便我们拼接solr的查询语句,
好了,直奔下一步。上面讲到的只要出现或者我们可以理解为:solrSQL= solrFQL2>slorSQL1。
当然有些业务需求不同,可能是 solrSQL>solrFQ1=solrFQ2,这种需求为 在情况solrSQL的结果中,找出并且solrFQ1或者solrFQ2的情况,
具体的查询代码(以举例说明):
solrSQL:X_1457955996315_TM:"测试" + X_1457955996315_TM:"光盘"+ X_1457955996316_TM:"测试" + X_1457955996316_TM:"光盘"
solrFQ:X_1457955996315_TM:"竣工" + X_1457955996316_TM:"竣工"
solrFQ2:
2.并且 不含 的情况
等级为:solrSQL = solrFQ1 != solrFQ2
具体的查询代码(以举例说明):
solrSQL:X_1457955996315_TM:"测试" + X_1457955996316_TM:"测试"
solrFQ:X_1457955996315_TM:"竣工" + X_1457955996316_TM:"竣工" NOT X_1457955996315_TM:"光盘" NOT X_1457955996316_TM:"光盘"
solrFQ2:
不知道大家有没有发现以上情况除了 并且- 并且- 并且 的情况 其他情况基本上用不到 solrFQ2,基本上是在solrSQ和solrFQ1进行处理。
大家以此类推四级、五级.......N级的筛选情况。
以上是关于solr同一个条件查询,为啥第一次能查询出来,第二次却查询不出来,但第三次又能查询出来了这是为啥?的主要内容,如果未能解决你的问题,请参考以下文章