gpt4 book ai didi

java - Lucene:使用 DocValues 添加字段时为空值

转载 作者:搜寻专家 更新时间:2023-11-01 02:22:56 38 4
gpt4 key购买 nike

我将一个文档字段更改为可按搜索排序,但现在 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/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com