我不知道如何索引和搜索Registred_Date(它包含sql格式的datetime).我需要在几年或几天之间搜索.我正在使用布尔查询进行搜索.下面的代码用于数字字段和普通现场索引.
IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(),Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);
DataSet ds = new DataSet();
//ds contains table
if (ds.Tables[0] != null)
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
//Create the Document object
Document doc = new Document();
foreach (DataColumn dc in dt.Columns)
{
string check = dc.ToString();
if (check.Equals("Experience"))
{
int n=Convert.ToInt32(dr[dc.ColumnName]);
NumericField numericField = new NumericField(dc.ColumnName, Field.Store.YES, true);
numericField.SetIntValue(n);
doc.Add(numericField);
}
else if(check.Equals("Registred_Date"))
{
}
else
{
doc.Add(new Field(dc.ColumnName, dr[dc.ColumnName].ToString(), Field.Store.YES, …Run Code Online (Sandbox Code Playgroud) i传递给搜索的字符串是(Experience:[1 TO 5])搜索所有数字的地方,如15,25,21,51等.我需要在数字1和5之间搜索,
using Lucene.Net.Store;
var results = new List<SearchResults>();
// Specify the location where the index files are stored
string indexFileLocation = @"G:\Lucene.Net\Data\Document";
var dir = Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation);
var reader = IndexReader.Open(dir);
var searcher = new IndexSearcher(reader);
var analyzer = new StandardAnalyzer();
var queryParser = new QueryParser("Prof_ID", analyzer);
// <default field> is the field that QueryParser will search if you don't
string special = "";
if (!txtkeyword.Text.Equals(""))
{
special = special + "(Experience:[1 TO 5])";
}
var …Run Code Online (Sandbox Code Playgroud) 我已经尝试了以下方法来组合查询,但我不知道如何在这些查询中添加(AND,OR,NOT)运算符.
BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("Skill_Summary", "Java"));
Query pageQueryRange = NumericRangeQuery.NewIntRange("Experience", 1, 2, true, true);
booleanQuery.Add(query1, BooleanClause.Occur.MUST);
booleanQuery.Add(pageQueryRange, BooleanClause.Occur.MUST);
var hits = searcher.Search(booleanQuery);
Run Code Online (Sandbox Code Playgroud)
以上的结果booleanQuery是+Skill_Summary:Java +Experience:[1 TO 2]仍然没有得到结果
String termQueryString = "Skill_Summary:\"Java\"";
Query termQuery = queryParser.Parse(termQueryString);
Query QueryRange = NumericRangeQuery.NewIntRange("Experience", 1, 3, true, true);
Query query = termQuery.Combine(new Query[] { termQuery, QueryRange });
var hits = searcher.Search(query);
Run Code Online (Sandbox Code Playgroud) 在我的情况下,我需要搜索像C#,.Net,C++ ..等标签分析器删除特殊字符的关键字,所以我使用空白分析器,它不适合我.索引时:
public void Indexing(DataSet ds)
{
string indexFileLocation = @"D:\Lucene.Net\Data";
Lucene.Net.Store.Directory dir = Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation, true);
IndexWriter indexWriter = new IndexWriter(dir, new WhitespaceAnalyzer(), Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED);
if (ds.Tables[0] != null)
{
DataTable dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
//Create the Document object
Document doc = new Document();
foreach (DataColumn dc in dt.Columns)
{
string check = dc.ToString();
if (check.Equals("Skill_Summary"))
{
doc.Add(new Field(dc.ColumnName, dr[dc.ColumnName].ToString(), Field.Store.YES, Field.Index.ANALYZED));
}
if (check.Equals("Title"))
{
doc.Add(new Field(dc.ColumnName, dr[dc.ColumnName].ToString(), Field.Store.YES, Field.Index.ANALYZED)); …Run Code Online (Sandbox Code Playgroud)