- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将一个文档字段更改为可按搜索排序,但现在 addDocument()
抛出一个异常,指出该字段值为空,尽管我验证了 email 是一个非空字符串,当我添加字段。在异常发生之前,Lucene 代码正在从字段中获取 binaryValue()
。 StringField
构造函数不接受自定义 FieldType 是可疑的。我可以使用字符串字段进行排序吗?如何解决这个问题?
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 中新的更快排序功能。在建立索引时,将 email
字段添加到您的文档中,如下所示:
doc.add(new StringField("email", email, Field.Store.YES));
doc.add(new SortedDocValuesField("email", new BytesRef(email)));
此外,如果您要在搜索中查找所有包含电子邮件的文档,最好使用 new FieldValueQuery("email")
而不是 WildcardQuery
。
关于java - Lucene:使用 DocValues 添加字段时为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34436795/
我正在使用和使用 Lucene 来索引我们的数据,我遇到了一些关于 DocValues 字段的奇怪行为。 所以,任何人都可以解释一下常规文档字段(如 StringField 、 TextField 、
我将一个文档字段更改为可按搜索排序,但现在 addDocument() 抛出一个异常,指出该字段值为空,尽管我验证了 email 是一个非空字符串,当我添加字段。在异常发生之前,Lucene 代码正在
我正在尝试使用 Solr 实现不区分大小写的排序并面临 this issue . [已复制] ....But When I get search result its not sorted case
我正在使用 Lucene 5.2.1 内置的搜索引擎,但我在搜索的排序更新选项方面遇到了问题。使用排序选项搜索时出现错误: Exception in thread "main" java.lang.I
我正在向文档中添加一个 DocValue doc.add(new BinaryDocValuesField("foo",new BytesRef("bar"))); 要检索 ID 为 docId 的特
我刚刚使用 Lucene 5.5.0 实现对 JSF Web 应用程序的搜索。在应用程序中,多个用户可以编辑文档,并且将创建非常简单(仅日期和用户名)的编辑日志。示例: 2017-02-10 user
我是一名优秀的程序员,十分优秀!