2012-01-27 43 views
3

我正在使用Lucene来搜索索引,它工作正常。我唯一的问题是,我只需要一个特定的领域返回什么。你能指定Lucene只返回结果中的某个字段而不是整个文档吗?仅从Lucene返回某些字段搜索

回答

9

这就是为什么FieldSelector类存在。 您可以实现这样的

class MyFieldSelector : FieldSelector 
{ 
    public FieldSelectorResult Accept(string fieldName) 
    { 
     if (fieldName == "field1") return FieldSelectorResult.LOAD_AND_BREAK; 
     return FieldSelectorResult.NO_LOAD; 
    } 
} 

一类,并把它作为indexReader.Document(docid,new MyFieldSelector());

如果你有兴趣在加载领域,这将阻止加载领域,反过来,意味着加载文档时加快速度。我想你可以通过一些Google搜索找到更详细的信息。

-2

你是什么意思“返回某些领域”? Document.get()函数仅返回您请求的字段。

+0

这就是我现在使用的,但我只需要一个字段,所以我只是想知道是否有办法只返回该字段而不是整个文档。 – aaronj 2012-01-27 19:35:40

+0

@aaron:我还不确定你的意思是“回归”。来自'Document.get'的结果文本只是该字段的文本。如果你的意思是你不想存储其他字段的值,只需将它们标记为不存储。 – Xodarap 2012-01-27 21:57:06

+0

-1但'reader.Document'加载整个文档,而不仅仅是一个字段 – 2012-01-28 20:06:21

-2

是的,你绝对可以做你正在问的东西。您所要做的就是在document.get()方法中包含字段名称(区分大小写)。

string fieldNameText = doc.Get("fieldName"); 

仅供参考,在您的问题中包含一些代码通常是一个好主意。它使得更容易提供一个好的答案。

+0

我明白你的意思,这就是我现在做。我试图限制文档中包含的字段。 – aaronj 2012-01-27 21:37:52

+0

你没有问如何限制哪些字段包含在文档中。您问过如何在结果中返回某个字段。我不知道你是否正确的问题。 – SharpBarb 2012-01-27 22:25:14

+0

@SharpBarb,'你问如何返回结果中的某个字段。我不确定你是否正确的问题'请在阅读我的答案后再次阅读这个问题。我想我会有道理,然后 – 2012-01-28 22:06:20