多个条件查询
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中添加了你要查询的内容并且你所查询的字段(如id、name、content等)在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:*");
//取id、name和dream字段。也可这样写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方法进行分页,其用法见代码注释。单独运行分页查询结果如下:(说明:因为setStart(5)参数设为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没有)。
相关推荐
这段代码表示所有 `/solr/` 下的 URL 都需要进行基本认证,并且只有 `admin` 和 `user` 角色的用户才能访问。 4. **启动 Solr 并测试** 配置完成后,重启 Solr 服务,然后尝试访问 Solr 管理界面。浏览器应该会弹...
SolrJ是访问Solr的Java客户端库,提供了添加、更新和查询Solr索引的功能。以下是一些基本的使用示例: 1. **添加文档** - 使用SolrJ添加文档非常简单,只需创建一个`SolrInputDocument`对象,并调用`SolrServer....
- 启动Solr服务后,可以通过以下URL访问Solr: ``` http://192.168.172.130:8983/solr/index.html ``` **6. 配置Solr Core** - **创建配置目录**:例如,为了导入店铺信息和商品信息,需要创建相应的配置目录:...
Solr 提供了一个内置的管理界面,可以通过浏览器访问 `http://localhost:8983/solr/` 来查看核心状态、执行查询和管理索引。 9. **优化与更新**: 随着数据的增长和变化,可能需要对索引进行优化以提高搜索性能。...
3. **加载DataImportHandler jar包**:确保Solr能够访问DataImportHandler所需的jar包,这通常是通过将jar包放置在Solr的lib目录下来实现的。 #### 五、配置中文分词 中文分词对于处理中文文本非常重要,可以提高...
最后,为了优化性能,你还可以考虑在ASP.NET中实现缓存策略,例如使用内存缓存或者分布式缓存服务(如Redis),减少对Solr的频繁访问。 总结来说,ASP.NET调用Solr涉及的主要知识点包括:使用SolrNet客户端库、配置...
#### 五、访问Solr管理界面 完成上述步骤后,可以通过浏览器访问 Solr 的管理界面。默认情况下,管理界面的 URL 为 `http://localhost:8080/solr`。 #### 六、总结 Solr 作为一种成熟的企业级搜索平台,凭借其...
Solr 是一个开源的全文搜索引擎,它提供了高效、可扩展的搜索和分析功能。本教程将引导你完成Solr的基本安装、配置以及数据库索引的建立,特别关注定时增量索引这一重要特性。 首先,从Apache官方网站下载Solr的...
6. **修改 server.xml 文件中的编码**:在 Tomcat 的 `server.xml` 文件中修改 URL 编码设置,确保正确的字符集支持。 #### 六、总结 本文详细介绍了 Solr 的安装过程及 SolrCore 的配置方法。通过上述步骤,用户...
5. 访问 http://ip:8983/solr,进入 Solr 控制台。 Solr 导入 Oracle 数据库 Solr 可以通过 DataImportHandler 从 Oracle 数据库中导入数据,并创建索引。下面是具体的步骤: 1. 将 dist 文件夹下的 solr-...
- 启动Tomcat,访问[http://localhost:8080/solr/index.html](http://localhost:8080/solr/index.html)检查是否安装成功。 3. **Solr管理界面**: - Solr管理界面提供了详细的配置选项,包括核心管理(Core ...
2. **访问Solr管理界面**:在浏览器中输入`http://localhost:8983/solr`即可访问Solr的管理控制台。 3. **创建核心实例(Core)**:在Solr管理界面中选择“New Core”来创建一个新的核心实例。如果创建过程中遇到...
url="your_database_url" user="your_username" password="your_password"/> query="SELECT uid, openid, phone, username, headimgurl, sex, province, city, country FROM xs_user"> ...
这表明这是一个具体的Solr服务访问对象(Service Access Object)实现,用于处理与Solr服务器的交互。 #### 三、依赖注入与配置 1. **依赖注入**:通过`@Autowired`注解,将`SolrService`服务注入到`SolrSaoImpl`...
4. **RESTful API**:Solr 使用标准的HTTP协议,通过简单的URL即可完成对索引和查询操作的调用。 5. **高可用性**:Solr 提供了复制机制,确保数据的可靠性和服务的连续性。 ### Solr版本的选择 由于Solr持续发展...
这样,你就可以通过`http://yourserver:port/solr`访问Solr了。 5. **启动Tomcat**:重启Tomcat服务器,Solr应该会自动启动。在浏览器中输入上述URL,如果看到Solr的管理界面,说明部署成功。 6. **创建和配置...
如果能够正常访问Solr的管理界面,则表示配置成功。 ### 3. 配置ZooKeeper集群 最后一步是配置ZooKeeper集群来支持Solr集群的稳定性与高可用性。 **步骤一:** 解压`zookeeper-3.4.6.tar.gz`到`D:\Java\solrCloud...