public void updateDocsByQuery(String queryStr, String fieldName, String fieldValue)
throws Exception {
SolrDocumentList docList = fetchDocsByQuery(queryStr, "id" , 5000);
if (!docList.isEmpty()) {
Collection<SolrInputDocument> docs = new ArrayList<>();
for (int i=0; i<docList.size(); i++) {
SolrDocument doc = docList.get(i);
String id = (String) doc.getFieldValue("id");
SolrInputDocument inputDoc = new SolrInputDocument();
inputDoc.addField("id", id);
Map<String, Object> fieldMod = new HashMap<>(1);
fieldMod.put("set", fieldValue);
inputDoc.addField(fieldName, fieldMod);
docs.add(inputDoc);
}
client.add(docs);
client.commit();
}
}
我的架构是
<schema name="MySchema" version="1.5">
<fields>
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_en" indexed="true" stored="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true" />
<field name="subject" type="text_en" indexed="true" stored="true"/>
<field name="author" type="text_en" indexed="true" stored="true"/>
<field name="keywords" type="text_en" indexed="true" stored="true"/>
<field name="category" type="text_en" indexed="true" stored="true"/>
<field name="suggested_links" type="string" indexed="true" stored="true" />
<field name="resourcename" type="string" indexed="true" stored="true" docValues="true" />
<field name="resource_names" type="string" indexed="true" stored="true" multiValued="true" docValues="true" />
<field name="content_type" type="string" indexed="true" stored="true" docValues="true"/>
<field name="last_modified" type="date" indexed="true" stored="true"/>
<field name="source_group" type="string" indexed="true" stored="true" />
<!-- Main body of document -->
<field name="content" type="text_en" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
<!-- catchall field, containing all other searchable text fields (implemented via copyField further on in this schema -->
<field name="text" type="text_en" indexed="true" stored="false" multiValued="true" />
<!-- holds Solr dedupe hash code -->
<field name="dedupeSignatureField" type="string" indexed="true" stored="true" multiValued="false" />
<!-- copy fields to search by default in our catch-all field, 'text' -->
<copyField source="title" dest="text"/>
<copyField source="subject" dest="text"/>
<copyField source="author" dest="text"/>
<copyField source="keywords" dest="text"/>
<copyField source="content" dest="text"/>
</fields>
<uniqueKey>id</uniqueKey>
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
</types>
在此输入代码
我在使用Solr5.4.0时也遇到了这个问题。只有docList中的最后一个文档被用来更新该值,其余的文档被删除。
我的解决方案,在您的代码中替换:
inputDoc.addField("id", id);
与
inputDoc.setField("id", id);
问题内容: 我正在使用Spring JPA存储库将Twitter推文保存在数据库中。鸣叫的日期在MySQL数据库中另存为Datetime。现在,我想删除所有超过一年的推文。我看到有功能,想到了类似的东西。我知道那不是正确的语法,但是我不知道该怎么做。这是我所拥有的: 编辑已解决: 仓库: 服务: 问题答案: 为此,您需要2个步骤。首先,您需要一个方法,该方法将要删除消息的日期作为参数,并且根本不需
null null 当我关注文本字段时,背景和边框颜色分别变为黄色和绿色(通过css)。 如果单击submit而不输入任何内容,边框颜色将变为红色(通过javascript)。 但当我再次将焦点放在文本字段时,红色边框颜色并没有消失,而是同时出现绿色和红色边框。 我只希望它是绿色的。你能不能也解释一下这种行为的原因。
问题内容: 在很多情况下,您需要根据某些条件执行INSERT,UPDATE或DELETE语句。我的问题是,对查询性能的影响是否在命令前添加了IF EXISTS。 例子 INSERT或DELETE呢? 问题答案: 我不太确定,但是我得到的印象是,这个问题实际上是关于upsert的,它是以下原子操作: 如果该行同时存在于源和目标中,则为目标。 如果该行仅存在于源中,则该行进入目标;否则,该行进入目标。
插入、更新和删除语句基于以开头的层次结构生成 UpdateBase . 这个 Insert 和 Update 构建基于中介的 ValuesBase . DML基础构造函数 顶级的“插入”、“更新”、“删除”构造函数。 Object Name Description delete(table[, whereclause, bind, returning, ...], **dialect_kw) 构建
我有父实体和一个方向作为具有关系的子实体。我尝试使用Hibernate查询删除超过一周的广告,但得到的结果是: com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新父行:外键约束失败(.,constraint外键()引用() 用户: 筛选器: 广告: DAO删除方法:
我正在编写C++来解决这个问题,从leetcode:https://leetcode.com/problems/remove-element/ 给定数组nums和值val,移除该值的所有实例并返回新的长度。 不要为另一个数组分配额外的空间,您必须用O(1)个额外内存修改输入数组。 元素的顺序可以更改。你在新长度之外留下什么并不重要。 您的函数应该返回长度=2,nums的前两个元素为2。 在返回长度