[英]Lucene.NET: Recommended way to index and search for DateTime and TimeSpan fields
[英]Lucene.NET search index approach
我試圖在我們的一個網站上整理一個使用Lucene.NET的測試用例。 我想做以下事情:
索引一個唯一的ID。 跨逗號分隔的術語或標簽字符串的索引。
例如。
第1項:Id = 1標簽=某些東西,分項
然后,我將構建搜索結構,以便可以根據標簽查找文檔,即
標簽:某物或標簽:分隔項
我需要維護確切的術語值以便對其進行搜索。
我正在運行某些程序,並且正在按預期方式解析搜索查詢,但是沒有看到任何結果。 這是一些代碼。
我的解析器(_luceneAnalyzer被傳遞到我的索引服務中):
var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_CURRENT, "Tags", _luceneAnalyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
return parser;
我的Lucene.NET文檔創建:
var doc = new Document();
var id = new Field(
"Id",
NumericUtils.IntToPrefixCoded(indexObject.id),
Field.Store.YES,
Field.Index.NOT_ANALYZED,
Field.TermVector.NO);
var tags = new Field(
"Tags",
string.Join(",", indexObject.Tags.ToArray()),
Field.Store.NO,
Field.Index.ANALYZED,
Field.TermVector.YES);
doc.Add(id);
doc.Add(tags);
return doc;
我的搜索:
var parser = BuildQueryParser();
var query = parser.Parse(searchQuery);
var searcher = Searcher;
TopDocs hits = searcher.Search(query, null, max);
IList<SearchResult> result = new List<SearchResult>();
float scoreNorm = 1.0f / hits.GetMaxScore();
for (int i = 0; i < hits.scoreDocs.Length; i++)
{
float score = hits.scoreDocs[i].score * scoreNorm;
result.Add(CreateSearchResult(searcher.Doc(hits.scoreDocs[i].doc), score));
}
return result;
我的索引中有兩個文檔,一個帶有標簽“ Something”,另一個帶有標簽“ Something”和“ Separated-Term”。 重要的是-保留條款,因為我希望完全匹配全部價值。
當我使用“ tags:Something”搜索時,沒有得到任何結果。
題
我應該使用什么分析器來獲得我想要的搜索索引? 是否有任何指針可以將這樣的搜索組合在一起? 為什么我當前的搜索未返回任何結果?
非常感謝
需要考慮的一些想法:
希望這可以幫助,
看來您可以將多個具有相同名稱的字段添加到文檔中,所以我將代碼更改為:
foreach (string tag in vehicle.Tags)
{
var tags = new Field(
TAGS,
tag,
Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.YES);
doc.Add(tags);
}
現在,我可以在“標簽”字段中按單個或多個標簽進行搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.