java – Lucene:使用DocValues添加字段时为null值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Lucene:使用DocValues添加字段时为null值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1897字,纯文字阅读大概需要3分钟。
内容图文
![java – Lucene:使用DocValues添加字段时为null值](/upload/InfoBanner/zyjiaocheng/810/ec2243913083462cb079bfd370328779.jpg)
我通过搜索更改了一个文档字段以进行排序,但现在addDocument()抛出一个异常,说明该字段值为null,尽管我在添加字段时验证了该电子邮件是非空字符串.在异常之前Lucene代码从字段中获取binaryValue(). StringField构造函数不接受自定义FieldType是可疑的.我可以使用String字段进行排序吗?如何解决这个问题?
Lucene 5.3.1
private static final FieldType EMAIL_FIELD_TYPE = new FieldType(StringField.TYPE_STORED);
static
{
EMAIL_FIELD_TYPE.setDocValuesType(DocValuesType.SORTED);
EMAIL_FIELD_TYPE.freeze();
}
...
doc.add(new Field("email", email, EMAIL_FIELD_TYPE));
...
writer.addDocument(doc);
writer.commit();
java.lang.IllegalArgumentException: field "email": null value not allowed
at org.apache.lucene.index.SortedDocValuesWriter.addValue(SortedDocValuesWriter.java:65)
at org.apache.lucene.index.DefaultIndexingChain.indexDocValue(DefaultIndexingChain.java:435)
at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:376)
at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:300)
at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:234)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:450)
at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1475)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1254)
编辑:
此代码用于搜索:
Query q = new WildcardQuery(new Term("email", "*"));
Sort sort = new Sort(new SortField("email", SortField.Type.STRING));
TopDocs res = searcher.search(q, Integer.MAX_VALUE, sort);
解决方法:
您需要单独添加SortedDocValuesField以利用Lucene 5中新的更快排序.在建立索引时,将电子邮件字段添加到文档中,如下所示:
doc.add(new StringField("email", email, Field.Store.YES));
doc.add(new SortedDocValuesField("email", new BytesRef(email)));
此外,如果您在搜索中尝试使用电子邮件查找所有文档,最好使用new FieldValueQuery("email")而不是WildcardQuery.
内容总结
以上是互联网集市为您收集整理的java – Lucene:使用DocValues添加字段时为null值全部内容,希望文章能够帮你解决java – Lucene:使用DocValues添加字段时为null值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。