gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:00:04 25 4
gpt4 key购买 nike

传递给搜索的字符串 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 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();

最佳答案

要进行范围类型的查询,您应该这样做,

var query = new TermRangeQuery(
"Experience",
"1",
"5",
includeLower: true,
includeUpper: true);

但是,如果您将数字存储为 string,这可能会返回错误的范围,因为它进行的是字符串比较,而不是数字比较;因此 "5"> "15"true,而不是相反。

要进行数字范围类型的查询,

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 文档之前。

关于c# - 为什么 Lucene 数字范围搜索不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com