我正在使用带有.net4的lucene.net版本2.9.2.2。我在寻找 "结束于"查询与路径。它不应该标记化,如果它,则返回TRUE 发生在两者之间。
索引路径:
C:\Users\vj\folder1\lucene\
C:\Users\vj\folder1\lucene\folder1\folder2
C:\Users\vj\folder2\lucene2\folder1\lucene\
索引代码:
new Field("PATH", strPath, Field.Store.YES, Field.Index.NOT_ANALYZED));
//Standard Analyzer
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
var writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
搜索代码:
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
var queryParser = new QueryParser(Version.LUCENE_29, "PATH", analyzer);
var query = queryParser.Parse(strPath);
搜索查询:folder1\lucene\
预期结果:
C:\Users\vj\folder1\lucene\
C:\Users\vj\folder2\lucene2\folder1\lucene\
如何获得以上结果。我已经看到很多关于SO的问题 相同。但没有一个包含一段工作代码。
答案 0 :(得分:0)
这是一个示例程序,它提供您正在寻找的输出。
注意事项:
希望这会对你有所帮助。
using System;
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Store;
namespace TestProgram
{
class Program
{
static void Main(string[] args)
{
FSDirectory directory = FSDirectory.Open(@"c:\temp\myindex");
BuildIndex(directory);
QueryIndex(directory);
}
static void BuildIndex(Directory directory)
{
string[] paths = new[]
{
@"C:\Users\vj\folder1\lucene\",
@"C:\Users\vj\folder1\lucene\folder1\folder2",
@"C:\Users\vj\folder2\lucene2\folder1\lucene\"
};
Analyzer analyzer = new WhitespaceAnalyzer();
using (var writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED))
{
foreach (string path in paths)
{
Document doc = new Document();
var field = new Field("Path", path, Field.Store.YES, Field.Index.NOT_ANALYZED);
doc.Add(field);
writer.AddDocument(doc);
}
}
}
private static void QueryIndex(Directory directory)
{
string userQueryString = @"folder1\lucene\";
Analyzer analyzer = new WhitespaceAnalyzer();
var queryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Path", analyzer);
queryParser.AllowLeadingWildcard = true;
string queryString = "*" + userQueryString.Replace(@"\", @"\\");
var query = queryParser.Parse(queryString);
IndexSearcher searcher = new IndexSearcher(directory);
IndexReader reader = searcher.IndexReader;
TopDocs topDocs = searcher.Search(query, 100);
foreach (ScoreDoc doc in topDocs.ScoreDocs)
{
string path = reader.Document(doc.Doc).Get("Path");
Console.WriteLine(path);
}
Console.ReadKey();
}
}
}