【问题标题】:Lucene: null value when adding a field with DocValuesLucene:使用 DocValues 添加字段时为空值
【发布时间】:2015-12-23 13:28:25
【问题描述】:

我将文档字段更改为可通过搜索排序,但现在addDocument() 抛出异常,指出字段值为空,尽管我在添加字段时验证了电子邮件是非空字符串。在异常 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);

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    您需要单独添加 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

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多