Я работаю с Lucene.NET, и это здорово. затем работал над тем, как заставить его искать азиатские языки. поэтому я перешел от StandardAnalyzer к CJKAnalyzer.
это прекрасно работает для корейского (хотя StandardAnalyzer нормально работал для корейского!) И китайского (который не работал), но я все еще не могу заставить программу распознавать японский текст.
в качестве очень маленького примера я пишу крошечную базу данных (используя CJKAnalyzer) с несколькими словами, а затем пытаюсь прочитать из базы данных:
public void Write(string text, AnalyzerType type)
{
Document document = new Document();
document.Add(new Field(
"text",
text,
Field.Store.YES,
Field.Index.ANALYZED));
IndexWriter correct = this.chineseWriter;
correct.AddDocument(document);
}
это для написания. и для чтения:
public Document[] ReadMultipleFields(string text, int maxResults, AnalyzerType type)
{
Analyzer analyzer = this.chineseAnalyzer;
QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer);
var query = parser.Parse(text);
// Get the fields.
TopFieldCollector collector = TopFieldCollector.create(
new Sort(),
maxResults,
false,
true,
true,
false);
// Then use the searcher.
this.searcher.Search(
query,
null,
collector);
// Holds the results
List<Document> documents = new List<Document>();
// Get the top documents.
foreach (var scoreDoc in collector.TopDocs().scoreDocs)
{
var doc = this.searcher.Doc(scoreDoc.doc);
documents.Add(doc);
}
// Send the list of docs back.
return documents.ToArray();
}
, где ChineseWriter - это просто IndexWriter с переданным CJKAnalyzer, а chineseAnalyzer - это просто CJKAnalyzer.
любой совет, почему японский язык не работает? входные данные, которые я посылаю, кажутся справедливыми:
プ ー ケ ッ ト
это то, что я буду хранить, но не могу прочитать. (
РЕДАКТИРОВАТЬ: Я был не прав ... Китайский на самом деле тоже не работает: если поисковый термин длиннее 2 символов, он перестает работать. То же, что и японец.
РЕДАКТИРОВАТЬ ЧАСТЬ 2: Теперь я видел, что проблема заключается в использовании поиска по префиксу. Если я ищу первые 2 символа и использую звездочку, это работает. Как только я перехожу через 2, он перестает работать. Я думаю, это из-за того, как слово токенизировано? Если я ищу полный термин, он находит его. Есть ли в любом случае использовать поиск префикса в Lucene.NET для CJK? Will * будет работать, но プ ー ケ * ничего не найдет.