我是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"));
doc.getFields()
返回所有字段,但doc.getField("Author")
返回null。
我做错了吗?
如果我做这样的事情,请进一步挖掘:
for(IndexableField myField:doc.getFields()){
System.out.println(myField.name());
}
打印以下内容:
dummy
dummy
dummy
dummy
如果我这样做doc.getField("dummy")
,它确实会返回第一个字段(作者)。
查看FacetField源代码:https://github.com/apache/lucene-solr/blob/branch_6_3/lucene/facet/src/java/org/apache/lucene/facet/FacetField.java 似乎所有构面字段都是使用" dummy":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);
这是一个错误吗?
答案 0 :(得分:1)
我自己遇到了同样的问题。如果您要编写所述文档并通过搜索获取它,您会发现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));
...
答案 1 :(得分:-1)
根据我的理解,您正在尝试检索作者的值,它应该作为“Bob”返回。
FacetField& Field是Lucene中两种不同类型的Fields,它们以不同的方式存储数据。 FacetField是Field类的子类。要初始化Field,您需要字段名称,类型&布尔值,表示您要检索字段。
公共类FacetField扩展Field
以下是字段初始化
的示例Field pathField = new StringField(“path”,file.toString(), Field.Store.YES);
doc.add(pathField);
现在,为了存储文档,你应该这样做。
SolrInputDocument doc = new SolrInputDocument();
String id =“1”;
String author =“Erick”;
String text =“我爱Solr书”;
doc.addField(“id”,id);
doc.addField(“作者”,标题);
doc.addField(“text”,text);
为了完成soling Indeing&使用Solrj搜索请回复link。
我希望这会有所帮助。