java - IntPoint 没有索引整数值

标签 java indexing lucene

当我们尝试使用字段类型“IntPoint”为整数值编制索引时,这些值似乎没有正确传输到我们的 Lucene 索引中。

我们正在使用 Lucene 6.0。

根据 Lucene 文档的代码片段:

        doc.add(new IntPoint(LENGTH2, 17));

应该将值为“17”的 LENGTH2 文档字段添加到我们的可索引文档中。 不幸的是,我们的索引字段 LENGHT2 中没有值。

我们还尝试过使用已弃用的字段类型“LegacyIntField”。使用这种类型,我们在索引字段中得到了一些神秘的符号,例如:

        950 length  h(5j
        950 length  pT
        950 length  xj
        950 length  `PkU2

对于这种类型,我们使用了以下代码:

        LegacyIntField intField = new LegacyIntField(LENGTH,0,Field.Store.NO);
        intField.setIntValue(17);
        doc.add(intField);

你知道这个问题的解决方案吗?

添加: 你有一个工作示例,其中包括 IntPoint 的索引和搜索吗? 我们试过了,但似乎不起作用。 Java Code for Lucene IntPoint Indexing

我们也试着在这个领域做了一些搜索。但结果与我们的预期不符。

   QueryParser parser = new MultiFieldQueryParser(fields,analyzer);
   Query query = parser.parse("content:" + queryString);

   Query queryNumeric = IntPoint.newRangeQuery(Indexer.LENGTH2, 0, 5);
   Builder builder = new Builder();
   builder.add(query, Occur.MUST);
   builder.add(queryNumeric, Occur.MUST);
   BooleanQuery booleanQ = builder.build();

   TopDocs hits2 = is.search(booleanQ, 1000);
   System.out.print("short: " + hits2.totalHits);

最佳答案

除此之外,您将字段索引为:

doc.add(new IntPoint(LENGTH2, 17));

您还需要通过添加单独的 StoredField 实例来单独存储该字段:

doc.add(new StoredField(LENGTH2,17));

根据IntPoint的文档

An indexed int field for fast range filters. If you also need to store the value, you should add a separate StoredField instance.

引用: https://lucene.apache.org/core/6_1_0/core/org/apache/lucene/document/IntPoint.html

关于java - IntPoint 没有索引整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989137/

相关文章:

java - 在 javascript 库 (ExtJS) 中编写 Web 应用程序的完整 View 逻辑的优缺点?

Java 创建新的 ObjectInputStream block

mysql - MYSQL求两点之间的距离。 (使用点数据类型)

arrays - Swift 2.2 indexOf 用于数组中的结构部分

lucene - 如何在 Lucene 中存储多种不同类型的文档

solr - 拆分 SOLR fq 过滤器查询

java - Solr——从文档收集器访问 reqh 对象

java - 在 Swing Worker 类中不适用于循环

JavaFX TableColumn 图形不隐藏

mysql - 按日期顺序排序时,“使用临时”会减慢查询速度