5

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();
4

1 に答える 1

7

範囲タイプのクエリを実行するには、次のことを行う必要があります。

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 ドキュメントに追加する前に。

于 2013-06-28T18:33:29.267 に答える