solr,
solr配置文件
1. solrConfig.xml : solr核心配置文件
2. schema.xml : solr约束文件
<!--第一种标签为 field标签: 主要是用来指定字段名称的, Lucene中是有用户在程序中指定, solr中需要提前在配置文件中指定-->
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
<!--name: 字段的名称
type: 字段的类型
indexed: 是否索引
stored: 是否保存
multiValued: 是否多值, 这个字段, 类似存储一个数组
这里有两个不允许删除的: 一个是 _version__ 一个是 _root__ 这两个是solr内部需要使用的字段
有一个字段的名称必须为id,其类型都不允许进行修改 原因是id字段已经被主键使用uniqueKey
其余的是一些初始化好的字段
-->
<!--第二种标签为dynamicField, 被称为是动态域 -->
<dynamicField name="*_is" type="int" indexed="true" stored="true" multiValued="true"/>
<!--此种标签是为程序的扩展所使用的, 因为我们不可能把所有的字段全部定义好, 所以就需要动态域来进行动态扩展-->
<!--第三种标签为 uniqueKey: 必要标签, 表名文档的唯一属性, 一般默认为id-->
<uniqueKey>id</uniqueKey>
<!--Lucene中是自己进行维护, solr中, 需要自己指定-->
<!--第四种标签为 copyField: 被称为是复制域-->
<copyField source="cat" dest="text"/>
<!--source: 表名要复制那个字段的值
dest: 复制到那个字段上
此种标签主要是为了查询所使用的,
例如, 当查询Text字段的时候, 实质上相当于查询title和name两个字段-->
<!--第五种标签: fieldType 字段类型定义标签-->
<fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedStopFilterFactory" managed="english" />
<filter class="solr.ManagedSynonymFilterFactory" managed="english" />
</analyzer>
</fieldType>
<!--此种标签是用来定义字段的类型的,可以指定此字段使用何种分词器进行分词-->
solrj
1. 增
写入document对象
// 写入索引
@Test
public void createIndexToSolr() throws IOException, SolrServerException {
//1. solrj的服务对象
//http://localhost:8080/solr/collection1 连接solr中collection1索引库的接口路径
SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");
//2. 添加document文档
SolrInputDocument doc = new SolrInputDocument();
//定义个文档的时候, id字段必须定义, 因为solr是需要程序员自己维护的
doc.addField("id","1");
doc.addField("title","solr是一个企业级的搜索应用服务器");
doc.addField("content","solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene");
solrServer.add(doc);
//3. 提交文档(发送请求的操作)
solrServer.commit();
}
写入javabean
// 使用javaBean添加索引
@Test
public void createIndexJavaBeanToSolr() throws IOException, SolrServerException {
//1. 创建solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");
//2. 添加javaBean的信息
Product product = new Product();
product.setId("8");
product.setTitle("壹万贰");
product.setName("iphoneXsMax");
product.setContent("就是有钱, 没办法");
solrServer.addBean(product);
//3. 提交
solrServer.commit();
}
2. 删
// 删除索引
@Test
public void deleteIndexToSolr() throws IOException, SolrServerException {
//1. 创建solrj的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");
//2. 执行删除操作
// solrServer.deleteById(" id/ids ");
//条件基本格式: 字段的名称:字段的值
solrServer.deleteByQuery("content:有钱");
//3. 执行提交
solrServer.commit();
}
3. 查
3.1 基本查询
返回document对象
//基本查询入门案例(原生获取document的方式)
@Test
public void queryBaseToSolr() throws SolrServerException {
//1. 创建solr的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");
//2. 执行查询的操作
SolrQuery query = new SolrQuery("*:*");
QueryResponse response = solrServer.query(query);
SolrDocumentList documentList = response.getResults();
for (SolrDocument document : documentList) {
Object id = document.get("id");
Object title = document.get("title");
Object content = document.get("content");
System.out.println(id+" "+title+" "+content);
}
}
返回javabean对象
// 查询的基本入门案例(使用javaBean获取结果集) 常用
@Test
public void queryJavaBeanToSolr() throws SolrServerException {
//1. 创建solr的服务对象
SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");
//2. 执行查询
SolrQuery query = new SolrQuery("*:*");
QueryResponse response = solrServer.query(query);
//3. 返回javaBean
List<Product> productList = response.getBeans(Product.class);
for (Product product : productList) {
System.out.println(product);
}
}
3.2 复杂查询
在创建SolrQuery时,我们填写的Query语句,可以有以下高级写法:
查询语句中如果有特殊字符,需要转义,可以使用: ” ”
1、匹配所有文档:*
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处. 同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。