私の目標は、後で検索できるようにファイルのPATHをインデックス化することです。 は、私は次のコードを持っている:検索フィールドとしてファイルパスを使用しているときに検索結果を取得できません - Lucene.NET 2.9
class Program
{
static void Main(string[] args)
{
Directory directory = FSDirectory.Open(new DirectoryInfo("LuceneIndex"));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
var writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);
writer.Optimize();
writer.Commit();
writer.Close();
String text1 = "C:\\Users\\Marto\\Desktop\\folder1\\file1.txt";
WriteDocument(text1);
SearchSomething("C:\\Users\\Marto\\Desktop\\folder1\\file1.txt");
Console.ReadLine();
}
private static void WriteDocument(String text)
{
Directory directory = FSDirectory.Open(new DirectoryInfo("LuceneIndex"));
string[] DEFAULT_STOP_WORDS = { };
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29, DEFAULT_STOP_WORDS);
var writer = new IndexWriter(directory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED);
var doc = new Document();
doc.Add(new Field("path", text, Field.Store.YES, Field.Index.NOT_ANALYZED));//text = "C:\\Users\\Marto\\Desktop\\folder1\\file1.txt"
writer.AddDocument(doc);
writer.Optimize();
writer.Commit();
writer.Close();
}
private static void SearchSomething(String searchText)
{
Directory directory = FSDirectory.Open(new DirectoryInfo("LuceneIndex"));
string[] DEFAULT_STOP_WORDS = { };
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29, DEFAULT_STOP_WORDS);
var parser = new QueryParser(Version.LUCENE_29, "path", analyzer);
Query query = parser.Parse(searchText);
//searchText = "C:\\Users\\Marto\\Desktop\\folder1\\file1.txt"
//but query = {C:usersmartodesktopfolder1file1.txt}
var searcher = new IndexSearcher(directory, true);
TopDocs topDocs = searcher.Search(query, 500);
int results = topDocs.ScoreDocs.Length;
Console.WriteLine("Found {0} results", results);
for (int i = 0; i < results; i++)
{
ScoreDoc scoreDoc = topDocs.ScoreDocs[i];
float score = scoreDoc.Score;
int docId = scoreDoc.Doc;
Document doc = searcher.Doc(docId);
Console.WriteLine("Result num {0}, score {1}", i + 1, score);
Console.WriteLine("Text found: {0}\r\n", doc.Get("path"));
}
searcher.Close();
directory.Close();
}
}
をしかし、私は「C:\ Users \ユーザー・マルト\デスクトップ\ folder1の\ FILE1.TXT」を検索する場合、クエリは、文字を削除\し、任意の結果を返しません。
他のアナライザーも試してみますが、同じ結果が得られます。 もし私が助けてくれるなら、私は非常に感謝しています!!!
ファイルパスなどの場合は、KeywordAnalyzerを使用する必要があります。 – ffriend
私はKeywordAnalyzerでも試しましたが、何も起こりません。 – Marto