我无法理解Lucene .NET枚举中的Field.Index。
分析/ not_analyzed / no / analyze_no_norms / not_analyzed_no_norms。
我已经做了自己的研究,但我仍然感到困惑的是我应该何时使用分析或未分析(因为我猜他们是两个主要选项)。
例如,如果我构建索引:
class Product{
public int Id {get;set;}
public string Name {get;set;}
public double Price { get; set; }
}
我主要使用Name的组合查询必须是“某事”并且价格在10 <范围内。 x&lt; 20.这是我正在使用的查询:
Query nameQuery= new QueryParser(Version.LUCENE_30, "Name",
new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)).Parse(nameTerm);
NumericRangeQuery<double> priceRangeQuery =
NumericRangeQuery.NewDoubleRange("Close", lowerband, upperband, true, true);
BooleanQuery query = new BooleanQuery();
query.Add(nameQuery, Occur.MUST);
query.Add(priceRangeQuery , Occur.MUST);
如果我这样查询,我应该分析/ not_analyze Id / Name / Price吗? 将Field.Store设置为是/否会产生什么影响? 有人可以用外行的方式向我解释一下吗?
非常感谢
答案 0 :(得分:1)
分析表示使用指定的分析器对字段进行标记化和后处理(例如小写),并将每个单个标记映射到该特定文档的索引中,以便您可以搜索此标记并查找文档。否则,您只能搜索该字段的全文以查找该文档。
选项&#34; no&#34;表示不编制索引意味着该字段的内容不用于索引。因此,您无法使用该字段的内容找到该文档。
在你的情况下,如果你没有在&#34; id&#34;您不需要对其进行索引的字段。如果您在其中搜索但仅使用确切的内容进行搜索,则只需将其编入索引而不进行分析。
您应该分析名称字段,因为您在那里搜索单个标记。
还应分析数字字段。
Field.Store = YES表示如果您已检索到lucene文档,则可以从db中读取特定字段的值。