私はLucene.NETで作業しています。その後、アジア言語を検索する方法を研究しました。私はStandardAnalyzerからCJKAnalyzerに移りました。CJKAnalyzer/Tokenizerに日本語のテキストを認識させることができません
韓国では正常に動作しますが(StandardAnalyzerは韓国語でOKですが)、中国語ではありませんが、日本語のテキストを認識するためのプログラムがまだありません。
はちょうど非常に小さな例として、私は、試してみて、データベースから読み込まれ、その中にいくつかの単語を持つ小さなデータベース(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はちょうどCJKAnalyzerとIndexWriterが渡され、そしてchineseAnalyzerはちょうどCJKAnalyzerができます。
日本語がうまくいかない理由についてのアドバイスはありますか?私が送った入力は、公正なようだ:
プーケット
私は保存するものですが、それを読み取ることができません。 :(
編集:私は間違っていた...中国は実際に動作しないか:それは検索語が長い2つの文字よりも、それは動作を停止し、日本と同じ
EDIT PART 2:。。私は最初の2文字を検索してアスタリスクを使用すると、それが動作します.2を超えるとすぐに動作しなくなります。 CJKのためにLucene.NETでプレフィックス検索を使用する方法はありますか?*は動作しますが、プーケは何も見つかりません。
Lucene.Net/Lucene.Net Contribのどのバージョンを使用していますか。私はちょうどNuGetで利用可能なパッケージの最新バージョンを使ってテストしました。あなたの入力でうまく動作します。 –
@Jf Beaulac - 2.9を使用しています。 – peteisace
私はあなたの質問に答えることができます。プーケットはプーケットです。 :)しかし、私は他に答えることはできません。 –