gpt4 book ai didi

c# - 如何在 Lucene.Net 中使用 Whitespaceanalyzer 和 LowerCase 过滤器创建自己的分析器?

转载 作者:行者123 更新时间:2023-11-30 20:01:53 27 4
gpt4 key购买 nike

在我的例子中,我需要搜索像 C#、.Net、C++.. 等关键字,其中标准分析器去除了特殊字符,所以我使用了空白分析器,它对我不起作用。索引时:

public void Indexing(DataSet ds)
{
string indexFileLocation = @"D:\Lucene.Net\Data";
Lucene.Net.Store.Directory dir = Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation, true);
IndexWriter indexWriter = new IndexWriter(dir, new WhitespaceAnalyzer(), Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);
if (ds.Tables[0] != null)
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
//Create the Document object
Document doc = new Document();

foreach (DataColumn dc in dt.Columns)
{
string check = dc.ToString();

if (check.Equals("Skill_Summary"))
{
doc.Add(new Field(dc.ColumnName, dr[dc.ColumnName].ToString(), Field.Store.YES, Field.Index.ANALYZED));
}
if (check.Equals("Title"))
{
doc.Add(new Field(dc.ColumnName, dr[dc.ColumnName].ToString(), Field.Store.YES, Field.Index.ANALYZED));
}
}
// Write the Document to the catalog
indexWriter.AddDocument(doc);
}
}
}
// Close the writer
indexWriter.Close();
}

并像这样搜索字段:

string[] searchfields = new string[] { "Skill_Summary", "Title" };
var parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, searchfields, new WhitespaceAnalyzer());
string searchText = "C#";

//Split the search string into separate search terms by word
string[] terms = searchText.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
foreach (string term in terms)
{
finalQuery.Add(parser.Parse(term.Replace("*", "") + "*"), BooleanClause.Occur.MUST);
}
hits = searcher.Search(finalQuery);

在我的案例中,如何使用 Whitespaceanalyzer 和 LowerCase 过滤器构建自己的分析器?

最佳答案

how to build own analyzer using Whitespaceanalyzer and LowerCase filter in my case?.

public class CaseInsensitiveWhitespaceAnalyzer : Analyzer
{
/// <summary>
/// </summary>
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
TokenStream t = null;
t = new WhitespaceTokenizer(reader);
t = new LowerCaseFilter(t);

return t;
}
}

PS:当您使用通配符(?,*) 时,查询解析器不使用任何分析器,只是小写形式的您的术语(取决于 QueryParser.LowercaseExpandedTerms 的值)

关于c# - 如何在 Lucene.Net 中使用 Whitespaceanalyzer 和 LowerCase 过滤器创建自己的分析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17895537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com