1

私は初めて lucene.net を使用するので、コード行を見るといくつかの混乱が生じることに注意してください。lucene で単語を検索するためのサンプル コードを取得しましたが、いくつかの行が明確ではありません。以下にサンプル コードを示します。

質問1

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();

質問2

この下の行は、何が起こっているのか明確ではありません...!! 以下の各行の目的について説明してください。

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")));            
}

質問 3

ヘッダーとは:

タイプとは:

文字列のような検索キーワードの後に​​ヘッダーとタイプが連結されている理由 sSearchQuery = "(" + TextBox1.Text + sHeader + sType + ")";

質問 4

検索クエリのコンテンツにコンテンツが欠落している理由 次のように書くとどうなるか

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 ")";

ヘッダー、タイプ、コンテンツが読み取られる理由....何のために?? * oDoc.Get("ヘッダー") + oDoc.Get("タイプ") + oDoc.Get("コンテンツ") *

oDoc.Get("header") + oDoc.Get("type") + oDoc.Get("content")のようなヘッダー、タイプ、およびコンテンツを読み取る必要がある 理由も必要です??

4

1 に答える 1

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

于 2012-08-22T18:23:22.327 に答える