Dou*_*eri 3 java lucene solr facet
我是 Apache Lucene 的新手。我正在使用最新版本:6.3.0 和 facet 库。基于我在 github 上找到的示例:https : //github.com/apache/lucene-solr/tree/master/lucene/demo/src/java/org/apache/lucene/demo/facet
我有以下文件
Document doc = new Document();
doc.add(new FacetField("Author", "Bob"));
doc.add(new FacetField("Publish Date", "2010", "10", "15"));
doc.add(new FacetField("Tags", "A"));
doc.add(new FacetField("Tags", "B"));
//[FacetField(dim=Author path=[Bob]), FacetField(dim=Publish Date path=[2010, 10, 15]), FacetField(dim=Tags path=[A]), FacetField(dim=Tags path=[B])]
System.out.println(doc.getFields());
//null
System.out.println(doc.getField("Author"));
Run Code Online (Sandbox Code Playgroud)
doc.getFields()返回所有字段,但doc.getField("Author")返回 null。难道我做错了什么?
如果我做这样的事情,请进一步挖掘:
for(IndexableField myField:doc.getFields()){
System.out.println(myField.name());
}
Run Code Online (Sandbox Code Playgroud)
打印如下:
dummy
dummy
dummy
dummy
Run Code Online (Sandbox Code Playgroud)
如果我做这样的事情,doc.getField("dummy")它确实会返回第一个字段(作者)。
查看 FacetField 源代码:https : //github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java 似乎所有的 facet 字段都是用“虚拟”创建:https : //github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java
public FacetField(String dim, String... path) {
super("dummy", TYPE);
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?
我自己也遇到了同样的问题。如果您要编写所述文档并通过搜索获取它,您会看到 FacetFields 实际上并未作为文档的一部分存储。此外,在 FacetField 中搜索值不起作用(返回 0 结果)。如果有一个标志或其他东西会导致该字段同时写入分类法和索引本身,那就太好了,但我认为问题在于文档索引有几个其他属性不适用于facet 字段,因此他们只是将它们分开以避免混淆。
我解决这个问题的方法是在文档上写两次字段:一个作为 FacetField,另一个字段具有所需的属性。
例子:
Document doc = new Document();
// Add facet fields, not stored/searchable, but can be drilled down into
doc.add(new FacetField("Author", "Bob"));
...
// Add other fields
doc.add(new TextField("Author", "Bob", Store.YES));
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |