색인에있는 각 항목의 필드는 TYPE
입니다. 이 중 하나를 "Document", "Blog" or "Forum"
Lucene OR에 해당하는 중첩 부울
사용자들이 검색 할 TYPE의 선택할 수 수 있지만, "문서"를 검색 할 경우, 나는 그것의 STARTDATE
필드가 떨어질 경우 유효한에 "Document"
유형 만 반환되도록하는 범위 쿼리를 추가 할 필요가있다
{+ (유형 : 문서 + STARTDATE : [*가 20141022000000] 종류 : 블로그 게시물 유형 : ForumQuestion 유형 : ForumIdea 유형 : ForumIdeaList 유형 : ForumDiscussion)}
범위 는using (var searcher = new IndexSearcher(_directory, false))
{
var analyzer = new StandardAnalyzer(Version.LUCENE_29);
BooleanQuery booleanQuery = new BooleanQuery();
BooleanQuery innerTypeFilterQuery = new BooleanQuery();
long today = Convert.ToInt64(LuceneDate.Today().Value);
foreach (string filterItem in filterItems)
{
TermQuery filterItemQuery = new TermQuery(new Term("Type", filterItem));
innerTypeFilterQuery.Add(filterItemQuery, Occur.SHOULD);
if (filterItem == "Document")
{
innerTypeFilterQuery.Add(NumericRangeQuery.NewLongRange("StartDate", null, today, true, true), Occur.MUST);
}
}
if (innerTypeFilterQuery.Clauses.Count > 0)
{
booleanQuery.Add(innerTypeFilterQuery, Occur.MUST);
}
Sort sort = new Sort(new SortField(LuceneGeneric.IndexFields.StartDate, Lucene.Net.Search.SortField.LONG, true));
var hits = searcher.Search(booleanQuery, null, LuceneContentWidgetResult.HITS_LIMIT, sort).ScoreDocs;
var results = _mapLuceneContentWidgetSearchResultsToDataList(hits, searcher);
analyzer.Close();
searcher.Dispose();
return results;
}
내 쿼리는 다음과 같습니다
Thankyou - 내가 좋아하는 예제를 사용하면 제목 = "foo"를 검색 할 때 범위 검색을 추가하고 싶습니다. 이 경우 Foo는 거기에있을 것임을 알 수있는 상수입니다. 다른 검색에는 범위가 포함되지 않습니다. 기본적으로 문서는 만료 날짜가 있으므로 생략하고 싶습니다. – DavidB
질문을 * 완전한 * 진실 표로 바꿀 수 있습니까? 지금 나는 당신이 달성하고자하는 것을 이해하지 못합니다. – mindas
죄송합니다. 진리 테이블에 대한 경험이 없으므로 충분한 편집을하시기 바랍니다. – DavidB