C# Lucene搜索语法

C# Lucene搜索语法,c#,search,lucene.net,C#,Search,Lucene.net,我需要帮助确定在给定情况下使用哪些查询类型 我想我说得对,如果我把单词“FORD”存储在lucene字段中,并且我想找到一个精确的匹配项,我会使用TermQuery 但是,如果我要查找“FORD”一词,其中字段的内容存储为:- “福特|本田|铃木” 如果我搜索整个页面的内容,寻找一个短语呢?例如“请帮助我”如果您想在福特|本田|铃木中搜索福特,请使用Field.index.analysis进行索引,或按如下方式存储以使用TermQuery TermQuery意味着您希望搜索存储在索引中的术语,这

我需要帮助确定在给定情况下使用哪些查询类型

我想我说得对,如果我把单词“FORD”存储在lucene字段中,并且我想找到一个精确的匹配项,我会使用
TermQuery

但是,如果我要查找“FORD”一词,其中字段的内容存储为:-

“福特|本田|铃木”


如果我搜索整个页面的内容,寻找一个短语呢?例如“请帮助我”

如果您想在
福特|本田|铃木
中搜索福特,请使用Field.index.analysis进行索引,或按如下方式存储以使用TermQuery

TermQuery意味着您希望搜索存储在索引中的术语,这取决于您对该字段的索引方式(非_analysis、analysis+whichanalyyzer)。它最常用于未分析的字段

您也可以将TermQuery用于已分析的字段,但是您应该知道分析器如何标记您的输入字符串。下面是一个示例,以了解分析器如何标记您的输入

var text = @"What if i was to search the contents of an entire page, looking for a phrase? such as ""please help me""?";
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30 );
//var analyzer = new WhitespaceAnalyzer();
//var analyzer = new KeywordAnalyzer();
//var analyzer = new SimpleAnalyzer();

var ts = analyzer.TokenStream("", new StringReader(text));
var termAttr = ts.GetAttribute<ITermAttribute>();

while (ts.IncrementToken())
{
    Console.Write("[" + termAttr.Term + "] " );    
}
var text=@“如果我搜索整个页面的内容,寻找一个短语,比如“请帮助我”,该怎么办?”;
var analyzer=new StandardAnalyzer(Lucene.Net.Util.Version.Lucene_30);
//var analyzer=新的空白分析器();
//var analyzer=新关键字analyzer();
//var analyzer=新的SimpleAnalyzer();
var ts=analyzer.TokenStream(“,新的StringReader(文本));
var termAttr=ts.GetAttribute();
while(ts.IncrementToken())
{
Console.Write(“[”+termAttr.Term+“]);
}

我会将问题转向另一个方向,因此我将每个字段的多个值分别放在索引中——这会使搜索更简单。查看可能会有所帮助。

非常感谢您的帮助@德里克:大多数时候你都得用分析过的。未分析的字段不能与QueryParser一起使用(并非总是正确的)。我通常在ID、型号、颜色等字段中使用NOT_analysis。如果你想像google(文本中的任何单词)这样搜索,请使用analysisd。顺便说一句:Lucene/Lucene.Net有一个邮件列表,伟大的人可以在其中帮助你更多是的…(但是QueryParser不是必须的,你可以用BooleanQuery构建你自己的查询。QueryParser只会自动完成它)谢谢你的帮助,还有你的耐心!:-)@Derek NOT_Analysis的意思是“按原样存储文本”。因此,您必须按原样搜索它(TermQuery)。当我说“按原样”时,我的意思是完全匹配(相同的大写/小写、空格等),只需对上述代码稍加修改,看看Lucene是如何工作的,然后再继续使用您的代码。
var text = @"What if i was to search the contents of an entire page, looking for a phrase? such as ""please help me""?";
var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30 );
//var analyzer = new WhitespaceAnalyzer();
//var analyzer = new KeywordAnalyzer();
//var analyzer = new SimpleAnalyzer();

var ts = analyzer.TokenStream("", new StringReader(text));
var termAttr = ts.GetAttribute<ITermAttribute>();

while (ts.IncrementToken())
{
    Console.Write("[" + termAttr.Term + "] " );    
}