我将首次使用lucene.net,因此在看到代码行时会产生一些混乱。我得到了一个用lucene搜索单词的示例代码,很少有我不清楚。下面是示例代码。
ListBox1.Items.Clear();
var searcher = new Lucene.Net.Search.IndexSearcher(MapPath("~/searchlucene/"));
var oParser = new Lucene.Net.QueryParsers.QueryParser("content", new StandardAnalyzer());
string sHeader = " OR (header:" + TextBox1.Text + ")";
string sType = " OR (type:" + TextBox1.Text + ")";
string sSearchQuery = "(" + TextBox1.Text + sHeader + sType + ")";
var oHitColl = searcher.Search(oParser.Parse(sSearchQuery));
for (int i = 0; i < oHitColl.Length(); i++)
{
Document oDoc = oHitColl.Doc(i);
ListBox1.Items.Add(new ListItem(oDoc.Get("header") + oDoc.Get("type") + oDoc.Get("content")));
}
searcher.Close();
这下面的行不清楚发生了什么...... !!请讨论下面每行的目标。
string sHeader = " OR (header:" + TextBox1.Text + ")";
string sType = " OR (type:" + TextBox1.Text + ")";
string sSearchQuery = "(" + TextBox1.Text + sHeader + sType + ")";
var oHitColl = searcher.Search(oParser.Parse(sSearchQuery));
for (int i = 0; i < oHitColl.Length(); i++)
{
Document oDoc = oHitColl.Doc(i);
ListBox1.Items.Add(new ListItem(oDoc.Get("header") + oDoc.Get("type") + oDoc.Get("content")));
}
什么是标题:
什么是类型:
为什么选择&amp;在搜索关键字如字符串后输入concatinated sSearchQuery =“(”+ TextBox1.Text + sHeader + sType +“)”;
为什么searchquery内容中缺少内容 如果我像
那样写的话会是什么结果string sHeader = " OR (header:" + TextBox1.Text + ")";
string sType = " OR (type:" + TextBox1.Text + ")";
string sContent = " OR (content:" + TextBox1.Text + ")";
string sSearchQuery = "(" + TextBox1.Text + sHeader + sType + sContent ")";
为什么标题,类型&amp;内容正在阅读......对于什么? * oDoc.Get(“header”)+ oDoc.Get(“type”)+ oDoc.Get(“content”) *
为什么我需要读取标题,输入&amp;内容如 oDoc.Get(“header”)+ oDoc.Get(“type”)+ oDoc.Get(“content”) 我们只能阅读内容....为什么键入&amp;标题也是必需的??
答案 0 :(得分:0)
第一个代码构建一个搜索多个字段的查询,假设TextBox1中的输入不会弄乱查询(如包含括号或空格)。使用字符串连接构建搜索查询通常很难做到,我会使用MultiFieldQueryParser
代替。
var fields = new[] { "content", "header", "type" };
var analyzer = new StandardAnalyzer(Version.LUCENE_30);
var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, fields, analyzer);
var query = queryParser.Parse(TextBox1.Text);
var result = searcher.Search(query, 25); /* find 25 best matches */
您的for循环遍历结果并读取存储的字段的值并将它们添加到列表框中。这要求使用Field.Store.YES
编制索引的字段才能生效。