solr支持三种类型的原子更新:
- set - to set a field.
- add - to add to a multi-valued field.
- inc - to increment a field.
其中set可以是单值的也可以是multifiled, add 针对multi-field ,inc 对应数值类型
使用solrj进行原子更新
String zk= "127.0.0.1:2183"; String root="/solr"; CloudSolrClient solrClient=new CloudSolrClient(zk+root); solrClient.connect(); SolrInputDocument doc = new SolrInputDocument(); Map<String, String> partialUpdate = new HashMap<String, String>(); partialUpdate.put("set", "纯植物染发1次男女不限仅限短发,提供免费WiFi"); doc.addField("grouponId", "123456"); doc.addField("name", partialUpdate); Map<String,List<String>> cities=new HashMap<String, List<String>>(); List list=new ArrayList(); list.add("北京"); list.add("长春"); cities.put("set",list); doc.addField("city",cities); doc.addField("_version_",1); Map<String,String> subCat=new HashMap<String, String>(); subCat.put("add","美容"); doc.addField("subCat",subCat); Map<String,Long> price=new HashMap<String, Long>(); price.put("inc",100L); doc.addField("price",price); try { solrClient.add("groupon",doc); solrClient.commit("groupon"); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { solrClient.close(); } catch (IOException e) { e.printStackTrace(); }
原始数据:
{ grouponId: "123456", cat: [ "丽人" ], subCat: [ "美发" ], name: "纯植物染发1次男女不限仅限短发,提供免费WiFi1", price: 67.80000305175781, startTime: "2015-08-31T06:16:35Z", endTime: "2016-06-25T15:59:59Z", postTime: "2015-11-04T10:25:33.914Z", city: [ "北京市", "长春市" ], region: [ "新郑市" ], district: [ "炎黄广场" ], _version_: 1535465635791765500 }
执行代码后:
{ grouponId: "123456", cat: [ "丽人" ], subCat: [ "美发", "美容" ], name: "纯植物染发1次男女不限仅限短发,提供免费WiFi", price: 167.8000030517578, startTime: "2015-08-31T06:16:35Z", endTime: "2016-06-25T15:59:59Z", postTime: "2015-11-04T10:25:33.914Z", city: [ "北京", "长春" ], region: [ "新郑市" ], district: [ "炎黄广场" ], _version_: 1535467687828783000 }
关于更新中传入的_version_值说明:
- version<0,如果这个文档存在,则solr会拒绝修改,如果不存在,则add这个文档
- 当version=0时,如果待修改的文档存在,则修改这个文档,如果不存在。则add这个文档
- version=1 ,如果文档存在,则update这个文档,如果不存在,则拒绝修改,
- version>1, 如果文档的_version_值和传入的version值不一样,则拒绝修改,值一样则修改。
原子更新的几点问题:
- 如果有字段的store=false,但是在更新的时候没有给这个字段设置值,则这个字段在更新的时候数据会被丢掉; store=true的字段则不会。
- 针对multi-field字段,如果store=false, 则在原子更新 使用add时也会把这个字段之前的数据丢掉。
相关推荐
利用python的pycurl对Solr进行原子更新操作
2. **增量创建索引**:Solr支持增量索引,意味着当新的数据加入或已有数据发生变化时,无需重新构建整个索引,而是只更新受影响的部分。这对于大型数据集来说,既节省时间又节省资源。 3. **创建索引**:索引是Solr...
For more information, see: http://wiki.apache.org/solr/SolrLogging 原因,可能是你的solr服务器版本问题, 1、下载最新的solr包,比如:solr-5.3.1.zip 2、解压后找到,ext文件夹,把这个文件夹下面的所有jar...
solr -8.11.1.zip 文件
在tomcat的conf文件夹建立Catalina文件夹,然后在Catalina文件夹中在建立localhost文件夹,在该文件夹下面建立 apache-solr-3.6.0.xml 提交搜索资源并建立索引 cd /Volumes/Date/apache-tomcat-7.0.27/webapps/...
- 创建一个新的`solr`文件夹作为Solr的home目录,然后将`solr-4.9.0/example/solr`目录下的所有内容复制到这个新创建的`solr/home`目录中。 - 将`solr-4.9.0/example/lib/ext`目录下的所有jar包复制到Tomcat的`...
Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理和搜索大量文本数据。Solr是一款高效、可扩展的企业级全文搜索引擎,广泛应用于网站内容搜索、电子商务商品检索、文档检索系统等领域。它...
- 同时将mmseg4j-core/src/main/resources/data下的三个.dic文件拷贝到solr-4.9.0/example/solr/dic文件夹中。 8. **重启Tomcat:** - 重启Tomcat后,在浏览器中访问http://localhost:8888/solr/来查看部署效果。...
<Environment name="solr/home" type="java.lang.String" value="D:/solr/apache-solr-3.5.0/example/solr" override="true" /> </Context> ``` - 上述配置指定了Solr应用的基本位置以及其运行时的home目录。 4...
而定时更新功能是Solr的一个重要特性,它允许用户定期地、自动地从数据源导入新数据或者更新已有数据,以保持索引与实际数据的一致性。 在Solr中,定时更新主要通过DataImportHandler(DIH)实现,这是一个用于将...
主要的配置文件位于 `solr-8.8.1/server/solr/configsets/_default/conf` 目录下,包括 `solrconfig.xml` 和 `schema.xml`。这些文件定义了索引和查询的行为。 启动 Solr 需要 Java 运行环境。确保已安装 Java 8 或...
编辑Solr的配置文件,例如`/opt/solr/server/solr/configsets/_default/conf/solrconfig.xml`,在`<requestHandler>`部分添加IK分词器配置: ```xml <requestHandler name="/update" class="solr....
/opt/solr-5.2.1/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.10.154:2181 -cmd upconfig -collection ps_product -confdir /opt/solr-5.2.1/server/solr/configsets/data_driven_schema_configs ...