gpt4 book ai didi

java - Apache Lucene 从文档中返回 facet 字段

转载 作者:行者123 更新时间:2023-12-04 13:37:25 25 4
gpt4 key购买 nike

我是 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似乎所有方面字段都是用“虚拟”创建的: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);

这是一个错误吗?

最佳答案

我自己也遇到了同样的问题。如果您要编写上述文档并通过搜索获取​​它,您会发现 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));
...

关于java - Apache Lucene 从文档中返回 facet 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41334386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com