像往常一样,我转向大量的脑力量,这是Stackoverflow用户群,以帮助解决我遇到的Lucene.NET问题。首先,当我谈到Lucene和Lucene.NET时,我是一个完整的noob,并且通过在线使用分散的教程和代码片段,我已经为我的场景拼凑了以下解决方案。Lucene.net:查询和使用过滤器来限制结果
场景
我有以下结构的指标:
---------------------------------------------------------
| id | date | security | text |
---------------------------------------------------------
| 1 | 2011-01-01 | -1-12-4- | some analyzed text here |
---------------------------------------------------------
| 2 | 2011-01-01 | -11-3- | some analyzed text here |
---------------------------------------------------------
| 3 | 2011-01-01 | -1- | some analyzed text here |
---------------------------------------------------------
我需要能够查询文本字段,但结果限制为具有特定角色ID的用户。
我想出了要做到这一点(很多,多次到谷歌后)是使用“安全领域”和Lucene的过滤器来限制结果集简介如下:
class SecurityFilter : Lucene.Net.Search.Filter
{
public override System.Collections.BitArray Bits(Lucene.Net.Index.IndexReader indexReader)
{
BitArray bitarray = new BitArray(indexReader.MaxDoc());
for (int i = 0; i < bitarray.Length; i++)
{
if (indexReader.Document(i).Get("security").Contains("-1-"))
{
bitarray.Set(i, true);
}
}
return bitarray;
}
}
。 ..然后...
Lucene.Net.Search.Sort sort = new Lucene.Net.Search.Sort(new Lucene.Net.Search.SortField("date", true));
Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
Lucene.Net.Search.IndexSearcher searcher = new Lucene.Net.Search.IndexSearcher(Lucene.Net.Store.FSDirectory.Open(indexDirectory), true);
Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer);
Lucene.Net.Search.Query query = parser.Parse("some search phrase");
SecurityFilter filter = new SecurityFilter();
Lucene.Net.Search.Hits hits = searcher.Search(query, filter, sort);
可正常工作,只会返回与ID的1和3的问题是,在大型索引这一过程变得很慢文件。
最后,我的问题......有没有人有任何提示如何加快它,或有一个替代解决方案,会比我在这里提出的更有效率?
是否可以更改索引的格式? – goalie7960
是的,此时可以修改任何东西。 – nokturnal