代码:
private static void AddTextToIndex(string filename, string pdfBody, IndexWriter writer)
{
Document doc = new Document();
doc.Add(new Field("fileName", filename.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("pdfBody", pdfBody.ToString(), Field.Store.NO, Field.Index.NOT_ANALYZED));
writer.AddDocument(doc);
}
protected void txtBoxSearchPDF_Click(object sender, EventArgs e)
{
//some code
string searchQuery = txtBoxSearchString.Text;
Term t = new Term("fileName",searchQuery+"/i");
RegexQuery regQuer = new RegexQuery(t);
TopDocs resultDocs = indexSearch.Search(regQuer, indexReader.MaxDoc);
var hits = resultDocs.ScoreDocs;
foreach (var hit in hits)
{
var documentFromSearcher = indexSearch.Doc(hit.Doc);
string getResult = documentFromSearcher.Get("fileName");
string formattedResult = getResult.Replace(" ", "%20");
sb.AppendLine(@"<a href=https://de.com.edu/search/COM-Syllabi/" + formattedResult+ ">" + getResult+"</a>");
sb.AppendLine("<br>");
}
}
基本上我所要做的就是使用正则表达式以便我可以完全匹配,但我希望搜索不区分大小写。但是添加/i
选项实际上并不能使它成为正则表达式,所有它似乎都是将搜索词字面化为在与/i
连接的文本框中输入的内容。
有什么想法吗?
答案 0 :(得分:1)
区分大小写主要取决于您使用的Analyzer
。
RegexQuery
是MultiTermQuery
,这意味着它会被重写为与BooleanQuery
类似的内容,其中SHOULD
出现在与正则表达式匹配的所有条件上。< / p>
在搜索时,您的索引中的字词将被枚举并与您的正则表达式进行匹配。匹配的字词将作为子句添加到BooleanQuery
。
您的正则表达式显然无法通过分析器,因此您必须手动调整以符合您的条件。
而且,正则表达式语法不支持许多功能...... See the docs。
实际上,我简化了解释,真正发生的事情更复杂,因为发生了许多优化(所有的术语都没有枚举,正则表达式被编译成有限状态自动机,querty不一定被重写为{{ 1}}等)。但幕后发生的事情将与我在此处解释的结果相同。