当我们尝试使用字段类型“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/