C# 为什么Lucene数字范围搜索不起作用?

C# 为什么Lucene数字范围搜索不起作用?,c#,lucene.net,C#,Lucene.net,传递给search的字符串i是(经验:[1到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";

传递给search的字符串
i
(经验:[1到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 hits = searcher.Search(queryParser.Parse(special));

// Getting result to the list
for (int i = 0; i < hits.Length(); i++)
{
    SearchResults result = new SearchResults();

    result.Skillsummarry = hits.Doc(i).GetField("JS_Skill_Summary").StringValue();
    result.Experience = hits.Doc(i).GetField("Experience").StringValue();
    result.Profile_Id = hits.Doc(i).GetField("Prof_ID").StringValue();

    results.Add(result);
}

GridView1.DataSource = results;
GridView1.DataBind();
使用Lucene.Net.Store;
var results=新列表();
//指定存储索引文件的位置
字符串indexFileLocation=@“G:\Lucene.Net\Data\Document”;
var dir=Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation);
var reader=IndexReader.Open(dir);
var searcher=新索引搜索器(读卡器);
var analyzer=新的StandardAnalyzer();
var queryParser=新的queryParser(“Prof_ID”,analyzer);
//是QueryParser将搜索的字段(如果您不搜索)
字符串special=“”;
如果(!txtkeyword.Text.Equals(“”)
{
特殊=特殊+“(经验:[1至5])”;
}
var hits=searcher.Search(queryParser.Parse(特殊));
//将结果添加到列表中
对于(int i=0;i
要执行范围类型查询,您应该执行以下操作:

var query = new TermRangeQuery(
    "Experience", 
    "1", 
    "5", 
    includeLower: true, 
    includeUpper: true);
但是,如果您将数字存储为
string
,这可能会返回错误的范围,因为它执行的是字符串比较,而不是数字比较;因此
“5”>“15”
真的
,而不是相反

要执行数字范围类型查询,请执行以下操作:

var query = 
    NumericRangeQuery.NewDoubleRange(
        "Experience", 
        1, 
        5, 
        includeLower: true, 
        includeUpper: true);
但是,您需要确保在为文档编制索引时,将
Experience
字段存储为数字字段,而不是标准字段

var field = 
    new NumericField("Experience", Field.Store.YES, true)
        .SetDoubleValue(15, 25, 21, 51, etc. );

在将其添加到Lucene文档之前。

很抱歉,您的问题不太清楚。请编辑您的问题,并尝试弄清楚什么是有效的,以及您希望实现什么。您需要显示您是如何索引数据的,以及数据的外观。这段代码只是显示了您是如何查询现有索引的。谢谢@rae1n。您为我提供了一个正确的方法来满足我的需求。