设为首页 收藏本站
查看: 963|回复: 0

[经验分享] 访问solr 常用的URL

[复制链接]

尚未签到

发表于 2016-12-15 10:19:54 | 显示全部楼层 |阅读模式
多个条件查询
select?q=AUTHOR%3Abbb+ADDN%3A123&wt=json&indent=true
 
删除所有
update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true
 
删除某个
update/?stream.body=<delete><id>7</id></delete>&stream.contentType=text/xml;charset=utf-8&commit=true
 
模糊查询
/select?q=777&wt=json&indent=true
 
全量导入
dataimport?command=full-import&clean=true&commit=true&optimize=false
 
增量导入
dataimport?command=delta-import&clean=false&commit=true&optimize=false
 
导入状态查询
dataimport?command=status
 
查看索引文件信息
  replication?command=details
  调试
  select?q=id:*200000272250&debugQuery=true
文档里的查询实例可以应对一些普通的solr查询,复杂的solr查询还得自己再继续添加代码,自己也在学习中。先贴出完整代码,后再做说明。
注意:在运行如下查询实例前你得先向solr Admin中添加了你要查询的内容并且你所查询的字段(如idnamecontent等)在schema.xml中已被定义。
l  代码如下:
package mysolrtest;
 
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
 
public classQueryTest {
static String url = "http://10.7.11.141:8080/solr";
    static SolrServer solr = new HttpSolrServer(url);
   
    public static void main(String[]arguments) throws SolrServerException{
        QueryTesttest = newQueryTest();
        test.solrOrder();
        test.likeQuery();
        test.pageQuery();
        test.multipleQueryAND();
        test.multipleQueryOR();
        test.multipleQueryNOT();
    }
   
    //排序查询
    public void solrOrder() throws SolrServerException{
        SolrQueryquery = newSolrQuery();         
        query.setQuery("*:*"); //查询所有索引
        query.addSortField("id",SolrQuery.ORDER.asc)//id升序排列
        QueryResponsersp = solr.query(query);
        SolrDocumentListlist = rsp.getResults();
       
        for (int i = 0; i <list.size(); i++){
            //显示查询到的所有字段及字段内容
            System.out.println(list.get(i));
           
            //显示查询到的特定字段内容,下面几个函数也可这样显示
            SolrDocumentdoc = list.get(i);
             System.out.println(doc.get("id") + " " + doc.get("name") +
                " " + doc.get("interest")+ " "+ doc.get("dream"));
        }
       
    }
   
    //模糊查询
    public void likeQuery() throws SolrServerException{
        SolrQueryquery = newSolrQuery();         
        query.setQuery("name:*xiaomutou*");//查询name中含有xiaomutou字样的索引
        QueryResponsersp = solr.query(query);
        SolrDocumentListlist = rsp.getResults();
        for (int i = 0; i <list.size(); i++){
            System.out.println(list.get(i));
        }
    }
   
    //分页查询
    public void pageQuery() throws SolrServerException{
        SolrQueryquery = new SolrQuery();         
        query.setQuery("*:*");
        query.setStart(5);//当设置为5时,表示从第6记录取,默认取值为0,就是从第1条开始取
        query.setRows(5);//表示取出的记录数,默认是10
        QueryResponsersp = solr.query(query);
        SolrDocumentListlist = rsp.getResults();
        for (int i = 0; i <list.size(); i++){
            System.out.println(list.get(i));
        }
    }
   
       //多条件AND(并且)的情况
        public void multipleQueryAND() throws SolrServerException{
       //之前下行语句是在函数外面定义的(上面3个函数也是),如此就会出现覆盖情况
        SolrQuery query = new SolrQuery();
//      query.setQuery("name:*xiaomutou*");
//      query.setFilterQueries("dream:*");//过滤查询,即除上面的条件还需满足有字段dream
 
        //可以用下行语句代替前面两行语句。(注意:AND必须大写,可以用“&&”代替,如果是小写则
        //结果并非我们所预期的。我的理解是and并不是多条件查询关键字,如是and编译器则理解成
        //and字段,而空格相当于多条件OR,所以就相当于是OR查询了)
        query.setQuery("name:*xiaomutou* ANDdream:*");
 
        //idnamedream字段。也可这样写query.setFields("id", "name","dream")
        query.setFields("id, name, dream");
        QueryResponsersp = solr.query(query);
        SolrDocumentListlist = rsp.getResults();
//      System.out.println(list.size());//输出符合条件的list个数
        for (int i = 0; i < list.size();i++){
            System.out.println(list.get(i));
        }
    }
   
    //多条件OR(或者)的情况
    public void multipleQueryOR() throws SolrServerException{
        SolrQueryquery = newSolrQuery();
        query.setQuery("name:*datou* OR content:*"); //OR必须大写或用空格“||”代替
        query.setFields("id, name, content");
        QueryResponsersp = solr.query(query);
        SolrDocumentListlist = rsp.getResults();
        for (int i = 0; i <list.size(); i++){
            System.out.println(list.get(i));
        }
    }
   
    //多条件NOT(非)的情况
    public void multipleQueryNOT() throws SolrServerException{
        SolrQueryquery = newSolrQuery();
        //NOT必须大写或用“-”“!”代替,并且“-”或者“!”必须紧跟content,中间不能有空格
query.setQuery("name:*datou* NOTcontent:stick");
        query.setFields("id, name, content");
        QueryResponsersp = solr.query(query);
        SolrDocumentListlist = rsp.getResults();
        for (int i = 0; i <list.size(); i++){
            System.out.println(list.get(i));
        }
    }
}
l  说明如下:
1.     排序查询
使用addSortField方法可将查询出来的结果按照你指定的字段进行排序。单独运行排序查询结果如下:
(小技巧:可以选中你想注释的代码行按ctrl+7注释掉,取消注释也是如此)
SolrDocument{id=1, name=xiaomutou,sex=female, interest=[Reading travelling watching and singing!],_version_=1462269635528228864}
1 xiaomutou [Reading travellingwatching and singing!] null
SolrDocument{id=2, name=datou,sex=male, interest=[Travelling singsing and learning!], _version_=1462269635557588992}
2 datou [Travelling singsing andlearning!] null
SolrDocument{id=3, name=gufeng,age=22, dream=[Having a beautiful life!], _version_=1462269635558637568}
3 gufeng null [Having a beautifullife!]
SolrDocument{id=4, name=shanyin,age=23, dream=[Giving pengpeng a beautiful life!],_version_=1462269635559686144}
4 shanyin null [Giving pengpeng abeautiful life!]
SolrDocument{id=5, name=jiankang,content=[I just need health!], _version_=1462269635560734720}
5 jiankang null null
SolrDocument{id=6, name=pingan,age=24, content=[I just need safety!], _version_=1462269635560734721}
6 pingan null null
SolrDocument{id=7,name=datouxiaomutou, sex=male, age=23, interest=[Travelling singsing readingwatching and learning!], dream=[Having a beautiful life, travelling around theworld and giving pengpeng a beautiful life!], content=[I will stick to my dreamand strive it throught my life!], _version_=1462269635561783296}
7 datouxiaomutou [Travelling singsing readingwatching and learning!] [Having a beautiful life, travelling around the worldand giving pengpeng a beautiful life!]
2.     模糊查询
模糊查询其实很简单,因为solr本身就支持正则查询,所以通过setQuery指定你要查询的字段,以及要做模糊查询的值就搞定了。单独运行模糊查询结果如下:
SolrDocument{id=1, name=xiaomutou,sex=female, interest=[Reading travelling watching and singing!],_version_=1462269635528228864}
SolrDocument{id=7,name=datouxiaomutou,sex=male,age=23,interest=[Travellingsingsing reading watching and learning!], dream=[Having a beautiful life,travelling around the world and giving pengpeng a beautiful life!], content=[Iwill stick to my dream and strive it throught my life!],_version_=1462269635561783296}
3.分页查询
这里用到了setStart以及setRows方法进行分页,其用法见代码注释。单独运行分页查询结果如下:(说明:因为setStart5)参数设为5,所以结果从第6条记录开始输出)
SolrDocument{id=6, name=pingan,age=24, content=[I just need safety!], _version_=1462269635560734721}
SolrDocument{id=7,name=datouxiaomutou,sex=male,age=23,interest=[Travellingsingsing reading watching and learning!], dream=[Having a beautiful life,travelling around the world and giving pengpeng a beautiful life!], content=[Iwill stick to my dream and strive it throught my life!],_version_=1462269635561783296}
4.多条件查询
多条件查询AND、OR和NOT情况类似,具体用法见代码注释。单独运行多条件查询结果如下:
SolrDocument{id=7,name=datouxiaomutou, dream=[Having a beautiful life, travelling around theworld and giving pengpeng a beautiful life!]}
AND查询结果如上)
SolrDocument{id=7,name=datouxiaomutou, content=[I will stick to my dream and strive it throughtmy life!]}
SolrDocument{id=2, name=datou}
SolrDocument{id=5, name=jiankang,content=[I just need health!]}
SolrDocument{id=6, name=pingan,content=[I just need safety!]}
OR查询结果如上,优先输出同时满足多个条件的,在这里即为id=7索引内容)
SolrDocument{id=2, name=datou}
NOT查询结果如上)
  备注:在多条件查询NOT这里,运行结果起初没有达到自己所想要的(自己想只输出id=2索引内容,而之前把id=7索引内容也一起输出了),为了解决这个问题,自己网上找了一下午的资料都没解决,我以为自己没有理解AND、OR和NOT的语法。最后找老师帮忙看是哪里出错了,一起和老师调试程序并网上查资料弄了差不多也有一小时吧,终于找到了问题的根本,原来是content字段没被索引,即在schema.xml中把content字段中的index设置成了false,将其改为true即可(注意:要在tomcat目录下修改schema.xml<记得保存>重启tomcat再重新添加索引内容到solr Admin中才行,在solr下修改schema.xml没有)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314640-1-1.html 上篇帖子: 利用SOLR搭建企业搜索平台 下篇帖子: How to integrate Solr and Jboss
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表