Java ApacheLucene从文档返回方面字段

Java ApacheLucene从文档返回方面字段,java,solr,lucene,facet,Java,Solr,Lucene,Facet,我是阿帕奇·卢森的新手。我正在使用最新版本:6.3.0与facet库结合使用。 根据我在github上找到的示例: 我有以下文件 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 F

我是阿帕奇·卢森的新手。我正在使用最新版本:6.3.0与facet库结合使用。 根据我在github上找到的示例:

我有以下文件

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"));
doc.getFields()
返回所有字段,但
doc.getField(“作者”)
返回空值。 我做错什么了吗

如果我做这样的事情,我会进一步挖掘:

for(IndexableField myField:doc.getFields()){
    System.out.println(myField.name());
}
印行如下:

dummy
dummy
dummy
dummy
如果我这样做
doc.getField(“dummy”)
它确实会返回第一个字段(Author)

查看FacetField源代码: 似乎所有方面字段都是用“dummy”创建的:


这是一个bug吗?

根据我的理解,您正在尝试检索Author的值,它应该返回为“Bob”

FacetField和Field是Lucene中两种不同类型的字段,它们以不同的方式存储数据。FacetField是Field类的子类。要初始化字段,您需要字段名、类型和布尔值,这表示您是否要检索字段

公共类FacetField扩展字段

下面是字段初始化的示例

Field pathField=new StringField(“路径”,file.toString(), Field.Store.YES)
单据新增(路径域)

现在,为了存储文档,您应该这样做

SolrInputDocument doc=新的SolrInputDocument()
字符串id=“1”
字符串作者=“埃里克”
String text=“我爱Solr书”
doc.addField(“id”,id)
文件地址字段(“作者”,标题)
doc.addField(“文本”,文本)

为了理解使用Solrj的solr索引和搜索,请重新理解


我希望这能有所帮助。

我自己也遇到了同样的问题。如果您编写所述文档并通过搜索获得它,您将看到FacetFields实际上并不是作为文档的一部分存储的。此外,在FacetField中搜索值不起作用(返回0个结果)。如果有一个标志或其他东西会导致字段同时写入分类法和索引本身,那就太好了,但我认为问题是文档索引有几个其他属性不适用于方面字段,所以它们只是将它们分开以避免混淆

我解决这个问题的方法是在文档上写两次字段:一个作为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));
...

他问了一个关于Lucene类FacetField的具体问题——据我所知,它与SolrJ和Solr的集成并不相关?
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));
...