我正在使用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只是一个传入CJKAnalyzer的IndexWriter,而chineseAnalyzer就是CJKAnalyzer。
关于为什么日本人不工作的任何建议?我发送的输入看起来很公平:
プーケット
是我要存储的内容,但无法读取。 :(
编辑:我错了......中文也不起作用:搜索字词超过2个字符,它停止工作。与日语相同。编辑第2部分:我现在已经看到问题是使用前缀搜索。如果我搜索前2个字符并使用星号,那么它可以正常工作。一旦我超过2,它就会停止工作。我想这是因为这个词的标记方式?如果我搜索完整的术语,那么它确实找到了它。无论如何在Lucene.NET中使用前缀搜索CJK?プ*会起作用,但是プーケ*什么也没找到。
答案 0 :(得分:0)
我使用StandardTokenizer。无论是日文和韩文文本,它都可以标记包含3个字符或4的单词。但只关心中文字符。它确实对中文进行了标记,但一次只有1个字符。