本文整理汇总了C#中Lucene.Net.Search.QueryWrapperFilter类的典型用法代码示例。如果您正苦于以下问题:C# QueryWrapperFilter类的具体用法?C# QueryWrapperFilter怎么用?C# QueryWrapperFilter使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
QueryWrapperFilter类属于Lucene.Net.Search命名空间,在下文中一共展示了QueryWrapperFilter类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DocIdSetAnonymousInnerClassHelper
public DocIdSetAnonymousInnerClassHelper(QueryWrapperFilter outerInstance, Bits acceptDocs, AtomicReaderContext privateContext, Lucene.Net.Search.Weight weight)
{
this.OuterInstance = outerInstance;
this.AcceptDocs = acceptDocs;
this.PrivateContext = privateContext;
this.Weight = weight;
}
示例2: SearchCore
private static IList<int> SearchCore(SearchFilter searchFilter, out int totalHits)
{
if (!Directory.Exists(LuceneCommon.IndexDirectory))
{
totalHits = 0;
return new int[0];
}
SortField sortField = GetSortField(searchFilter);
int numRecords = searchFilter.Skip + searchFilter.Take;
using (var directory = new LuceneFileSystem(LuceneCommon.IndexDirectory))
{
var searcher = new IndexSearcher(directory, readOnly: true);
var query = ParseQuery(searchFilter);
var filterTerm = searchFilter.IncludePrerelease ? "IsLatest" : "IsLatestStable";
var termQuery = new TermQuery(new Term(filterTerm, Boolean.TrueString));
Filter filter = new QueryWrapperFilter(termQuery);
var results = searcher.Search(query, filter: filter, n: numRecords, sort: new Sort(sortField));
var keys = results.scoreDocs.Skip(searchFilter.Skip)
.Select(c => ParseKey(searcher.Doc(c.doc).Get("Key")))
.ToList();
totalHits = results.totalHits;
searcher.Close();
return keys;
}
}
示例3: TestBasic
public virtual void TestBasic()
{
Directory dir = new RAMDirectory();
IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
Document doc = new Document();
doc.Add(new Field("field", "value", Field.Store.NO, Field.Index.ANALYZED));
writer.AddDocument(doc);
writer.Close();
TermQuery termQuery = new TermQuery(new Term("field", "value"));
// should not throw exception with primitive query
QueryWrapperFilter qwf = new QueryWrapperFilter(termQuery);
IndexSearcher searcher = new IndexSearcher(dir, true);
TopDocs hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(1, hits.totalHits);
// should not throw exception with complex primitive query
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(termQuery, Occur.MUST);
booleanQuery.Add(new TermQuery(new Term("field", "missing")), Occur.MUST_NOT);
qwf = new QueryWrapperFilter(termQuery);
hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(1, hits.totalHits);
// should not throw exception with non primitive Query (doesn't implement
// Query#createWeight)
qwf = new QueryWrapperFilter(new FuzzyQuery(new Term("field", "valu")));
hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(1, hits.totalHits);
}
示例4: SearchCore
private IQueryable<Package> SearchCore(SearchFilter searchFilter, out int totalHits)
{
int numRecords = searchFilter.Skip + searchFilter.Take;
var searcher = new IndexSearcher(_directory, readOnly: true);
var query = ParseQuery(searchFilter);
// IF searching by relevance, boost scores by download count.
if (searchFilter.SortProperty == SortProperty.Relevance)
{
var downloadCountBooster = new FieldScoreQuery("DownloadCount", FieldScoreQuery.Type.INT);
query = new CustomScoreQuery(query, downloadCountBooster);
}
var filterTerm = searchFilter.IncludePrerelease ? "IsLatest" : "IsLatestStable";
var termQuery = new TermQuery(new Term(filterTerm, Boolean.TrueString));
var filter = new QueryWrapperFilter(termQuery);
var results = searcher.Search(query, filter: filter, n: numRecords, sort: new Sort(GetSortField(searchFilter)));
totalHits = results.totalHits;
if (results.totalHits == 0 || searchFilter.CountOnly)
{
return Enumerable.Empty<Package>().AsQueryable();
}
var packages = results.scoreDocs
.Skip(searchFilter.Skip)
.Select(sd => PackageFromDoc(searcher.Doc(sd.doc)))
.ToList();
return packages.AsQueryable();
}
示例5: TestBasic
public virtual void TestBasic()
{
Directory dir = NewDirectory();
RandomIndexWriter writer = new RandomIndexWriter(Random(), dir);
Document doc = new Document();
doc.Add(NewTextField("field", "value", Field.Store.NO));
writer.AddDocument(doc);
IndexReader reader = writer.Reader;
writer.Dispose();
TermQuery termQuery = new TermQuery(new Term("field", "value"));
// should not throw exception with primitive query
QueryWrapperFilter qwf = new QueryWrapperFilter(termQuery);
IndexSearcher searcher = NewSearcher(reader);
TopDocs hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(1, hits.TotalHits);
hits = searcher.Search(new MatchAllDocsQuery(), new CachingWrapperFilter(qwf), 10);
Assert.AreEqual(1, hits.TotalHits);
// should not throw exception with complex primitive query
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.Add(termQuery, Occur.MUST);
booleanQuery.Add(new TermQuery(new Term("field", "missing")), Occur.MUST_NOT);
qwf = new QueryWrapperFilter(termQuery);
hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(1, hits.TotalHits);
hits = searcher.Search(new MatchAllDocsQuery(), new CachingWrapperFilter(qwf), 10);
Assert.AreEqual(1, hits.TotalHits);
// should not throw exception with non primitive Query (doesn't implement
// Query#createWeight)
qwf = new QueryWrapperFilter(new FuzzyQuery(new Term("field", "valu")));
hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(1, hits.TotalHits);
hits = searcher.Search(new MatchAllDocsQuery(), new CachingWrapperFilter(qwf), 10);
Assert.AreEqual(1, hits.TotalHits);
// test a query with no hits
termQuery = new TermQuery(new Term("field", "not_exist"));
qwf = new QueryWrapperFilter(termQuery);
hits = searcher.Search(new MatchAllDocsQuery(), qwf, 10);
Assert.AreEqual(0, hits.TotalHits);
hits = searcher.Search(new MatchAllDocsQuery(), new CachingWrapperFilter(qwf), 10);
Assert.AreEqual(0, hits.TotalHits);
reader.Dispose();
dir.Dispose();
}
示例6: SearchCore
private SearchResults SearchCore(SearchFilter searchFilter)
{
// Get index timestamp
DateTime timestamp = File.GetLastWriteTimeUtc(LuceneCommon.GetIndexMetadataPath());
int numRecords = searchFilter.Skip + searchFilter.Take;
var searcher = new IndexSearcher(_directory, readOnly: true);
var query = ParseQuery(searchFilter);
// IF searching by relevance, boost scores by download count.
if (searchFilter.SortOrder == SortOrder.Relevance)
{
var downloadCountBooster = new FieldScoreQuery("DownloadCount", FieldScoreQuery.Type.INT);
query = new CustomScoreQuery(query, downloadCountBooster);
}
var filterTerm = searchFilter.IncludePrerelease ? "IsLatest" : "IsLatestStable";
Query filterQuery = new TermQuery(new Term(filterTerm, Boolean.TrueString));
if (searchFilter.CuratedFeed != null)
{
var feedFilterQuery = new TermQuery(new Term("CuratedFeedKey", searchFilter.CuratedFeed.Key.ToString(CultureInfo.InvariantCulture)));
BooleanQuery conjunctionQuery = new BooleanQuery();
conjunctionQuery.Add(filterQuery, Occur.MUST);
conjunctionQuery.Add(feedFilterQuery, Occur.MUST);
filterQuery = conjunctionQuery;
}
Filter filter = new QueryWrapperFilter(filterQuery);
var results = searcher.Search(query, filter: filter, n: numRecords, sort: new Sort(GetSortField(searchFilter)));
if (results.TotalHits == 0 || searchFilter.CountOnly)
{
return new SearchResults(results.TotalHits, timestamp);
}
var packages = results.ScoreDocs
.Skip(searchFilter.Skip)
.Select(sd => PackageFromDoc(searcher.Doc(sd.Doc)))
.ToList();
return new SearchResults(
results.TotalHits,
timestamp,
packages.AsQueryable());
}
示例7: SearchAsync
public Task<IEnumerable<SearchResultItem>> SearchAsync(string searchText, int projectId)
{
return Task.Run(() =>
{
//new searcher each time,
// because they don't see commits from any writer after being opened.
// even in huge deployments though, TD's number of concurrent searches
// would be tiny... not worth coding a mechanism to detect updates and
// reuse a searcher until the index is updated. In actuality, index
// updates would certainly be more frequent than index searches.
var searcher = new IndexSearcher(TdIndexDirectory, true);
var fields = new[] {"id", "title", "details", "tags", "events"};
var parser = new MultiFieldQueryParser(Version.LUCENE_30,
fields,
TdIndexAnalyzer);
var query = parser.Parse(searchText);
var collector = TopScoreDocCollector.Create(20, true);
if (projectId != default(int))
{
var filterQuery = new BooleanQuery();
filterQuery.Add(new TermQuery(new Term("projectid", projectId.ToString())), Occur.MUST);
var filter = new QueryWrapperFilter(filterQuery);
searcher.Search(query, filter, collector);
}
else
{
searcher.Search(query, collector);
}
return collector.TopDocs().ScoreDocs.Select(d =>
{
var document = searcher.Doc(d.Doc);
return new SearchResultItem
{
Id = int.Parse(document.Get("id")),
SearchScore = d.Score
};
});
});
}
示例8: TestQueries
public virtual void TestQueries()
{
int n = AtLeast(4);
for (int i = 0; i < n; i++)
{
Filter odd = new QueryWrapperFilter(new TermQuery(new Term("oddeven", "odd")));
AssertQuery(new MatchAllDocsQuery(), null);
AssertQuery(new TermQuery(new Term("english", "one")), null);
AssertQuery(new MatchAllDocsQuery(), odd);
AssertQuery(new TermQuery(new Term("english", "four")), odd);
BooleanQuery bq = new BooleanQuery();
bq.Add(new TermQuery(new Term("english", "one")), BooleanClause.Occur.SHOULD);
bq.Add(new TermQuery(new Term("oddeven", "even")), BooleanClause.Occur.SHOULD);
AssertQuery(bq, null);
// force in order
bq.Add(new TermQuery(new Term("english", "two")), BooleanClause.Occur.SHOULD);
bq.MinimumNumberShouldMatch = 2;
AssertQuery(bq, null);
}
}
示例9: SetUp
public void SetUp()
{
directory = new RAMDirectory();
IndexWriter writer =
new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
DateTime cal = new DateTime(1041397200000L * TimeSpan.TicksPerMillisecond); // 2003 January 01
for (int i = 0; i < MAX; i++)
{
Document doc = new Document();
doc.Add(new Field("key", "" + (i + 1), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("owner", (i < MAX / 2) ? "bob" : "sue", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("date", (cal.Ticks / TimeSpan.TicksPerMillisecond).ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
writer.AddDocument(doc);
cal.AddMilliseconds(1);
}
writer.Close();
searcher = new IndexSearcher(directory, true);
// query for everything to make life easier
BooleanQuery bq = new BooleanQuery();
bq.Add(new TermQuery(new Term("owner", "bob")), BooleanClause.Occur.SHOULD);
bq.Add(new TermQuery(new Term("owner", "sue")), BooleanClause.Occur.SHOULD);
query = bq;
// date filter matches everything too
//Date pastTheEnd = parseDate("2099 Jan 1");
// dateFilter = DateFilter.Before("date", pastTheEnd);
// just treat dates as strings and select the whole range for now...
dateFilter = new TermRangeFilter("date", "", "ZZZZ", true, true);
bobFilter = new QueryWrapperFilter(
new TermQuery(new Term("owner", "bob")));
sueFilter = new QueryWrapperFilter(
new TermQuery(new Term("owner", "sue")));
}
示例10: SearchCore
private IQueryable<Package> SearchCore(SearchFilter searchFilter, out int totalHits)
{
int numRecords = searchFilter.Skip + searchFilter.Take;
var searcher = new IndexSearcher(_directory, readOnly: true);
var query = ParseQuery(searchFilter);
// IF searching by relevance, boost scores by download count.
if (searchFilter.SortProperty == SortProperty.Relevance)
{
var downloadCountBooster = new FieldScoreQuery("DownloadCount", FieldScoreQuery.Type.INT);
query = new CustomScoreQuery(query, downloadCountBooster);
}
var filterTerm = searchFilter.IncludePrerelease ? "IsLatest" : "IsLatestStable";
Query filterQuery = new TermQuery(new Term(filterTerm, Boolean.TrueString));
if (searchFilter.CuratedFeedKey.HasValue)
{
var feedFilterQuery = new TermQuery(new Term("CuratedFeedKey", searchFilter.CuratedFeedKey.Value.ToString(CultureInfo.InvariantCulture)));
BooleanQuery conjunctionQuery = new BooleanQuery();
conjunctionQuery.Add(filterQuery, Occur.MUST);
conjunctionQuery.Add(feedFilterQuery, Occur.MUST);
filterQuery = conjunctionQuery;
}
Filter filter = new QueryWrapperFilter(filterQuery);
var results = searcher.Search(query, filter: filter, n: numRecords, sort: new Sort(GetSortField(searchFilter)));
totalHits = results.TotalHits;
if (results.TotalHits == 0 || searchFilter.CountOnly)
{
return Enumerable.Empty<Package>().AsQueryable();
}
var packages = results.ScoreDocs
.Skip(searchFilter.Skip)
.Select(sd => PackageFromDoc(searcher.Doc(sd.Doc)))
.ToList();
return packages.AsQueryable();
}
示例11: SearchCore
private SearchResults SearchCore(SearchFilter searchFilter)
{
// Get index timestamp
DateTime timestamp = File.GetLastWriteTimeUtc(LuceneCommon.IndexMetadataPath);
int numRecords = searchFilter.Skip + searchFilter.Take;
var searcher = new IndexSearcher(_directory, readOnly: true);
var query = ParseQuery(searchFilter);
// If searching by relevance, boost scores by download count.
if (searchFilter.SortProperty == SortProperty.Relevance)
{
var downloadCountBooster = new FieldScoreQuery("DownloadCount", FieldScoreQuery.Type.INT);
query = new CustomScoreQuery(query, downloadCountBooster);
}
var filterTerm = searchFilter.IncludePrerelease ? "IsLatest" : "IsLatestStable";
Query filterQuery = new TermQuery(new Term(filterTerm, Boolean.TrueString));
Filter filter = new QueryWrapperFilter(filterQuery);
var results = searcher.Search(query, filter: filter, n: numRecords, sort: new Sort(GetSortField(searchFilter)));
if (results.TotalHits == 0 || searchFilter.CountOnly)
{
return new SearchResults(results.TotalHits, timestamp);
}
var packages = results.ScoreDocs
.Skip(searchFilter.Skip)
.Select(sd => PackageFromDoc(searcher.Doc(sd.Doc)))
.ToList();
return new SearchResults(
results.TotalHits,
timestamp,
packages.AsQueryable());
}
示例12: SetUp
public override void SetUp()
{
base.SetUp();
directory = NewDirectory();
RandomIndexWriter writer = new RandomIndexWriter(Random(), directory);
// we use the default Locale/TZ since LuceneTestCase randomizes it
var cal = new DateTime(1970, 1, 1, 0, 0, 0, (int)TestUtil.NextLong(Random(), 0, long.MaxValue), new GregorianCalendar());
for (int i = 0; i < Max; i++)
{
Document doc = new Document();
doc.Add(NewStringField("key", "" + (i + 1), Field.Store.YES));
doc.Add(NewStringField("owner", (i < Max / 2) ? "bob" : "sue", Field.Store.YES));
doc.Add(NewStringField("date", cal.ToString(CultureInfo.InvariantCulture), Field.Store.YES));
writer.AddDocument(doc);
cal = cal.AddDays(1);
}
reader = writer.Reader;
writer.Dispose();
searcher = NewSearcher(reader);
// query for everything to make life easier
BooleanQuery bq = new BooleanQuery();
bq.Add(new TermQuery(new Term("owner", "bob")), BooleanClause.Occur.SHOULD);
bq.Add(new TermQuery(new Term("owner", "sue")), BooleanClause.Occur.SHOULD);
query = bq;
// date filter matches everything too
//Date pastTheEnd = parseDate("2099 Jan 1");
// dateFilter = DateFilter.Before("date", pastTheEnd);
// just treat dates as strings and select the whole range for now...
dateFilter = TermRangeFilter.NewStringRange("date", "", "ZZZZ", true, true);
bobFilter = new QueryWrapperFilter(new TermQuery(new Term("owner", "bob")));
sueFilter = new QueryWrapperFilter(new TermQuery(new Term("owner", "sue")));
}
示例13: ProcessNextInQueue
/// <summary>
/// Processes the next tweet from the queue
/// </summary>
public void ProcessNextInQueue()
{
//read the tweets with a MinValue as their index date
TermQuery query = new TermQuery(new Term(Settings.FIELD_TWEET_DATE_INDEXED, "0"));
Filter filter = new QueryWrapperFilter(query);
TopDocs results = _tweetSearcher.Search(query, filter, 1);
//if no results, return
if (results.totalHits == 0)
return;
Document tweetDoc = _tweetSearcher.Doc(results.scoreDocs[0].doc);
//construct the tweet
Tweet tweetToProcess = GetTweetFromDocument(tweetDoc);
Console.WriteLine("Processing Tweet " + tweetToProcess.TweetId);
//get the indexes
var indexes = GetIndexesFromDocument(tweetDoc);
//index the urls from the tweet
_urlIndexer.IndexUrlsInTweet(tweetToProcess, indexes);
}
示例14: Search
//.........这里部分代码省略.........
if ((modifiedBeginDate.Date > DateTime.MinValue.Date) || (modifiedEndDate.Date < DateTime.MaxValue.Date))
{
TermRangeQuery lastModifiedDateFilter = new TermRangeQuery(
"LastModUtc",
modifiedBeginDate.Date.ToString("s"),
modifiedEndDate.Date.ToString("s"),
true,
true);
filterQuery.Add(lastModifiedDateFilter, Occur.MUST);
}
//if ((!DisableSearchFeatureFilters) && (featureGuid != Guid.Empty))
//{
// BooleanQuery featureFilter = new BooleanQuery();
// featureFilter.Add(new TermQuery(new Term("FeatureId", featureGuid.ToString())), Occur.MUST);
// filterQuery.Add(featureFilter, Occur.MUST);
//}
if ((featureGuids != null) && (featureGuids.Length > 0))
{
BooleanQuery featureFilter = new BooleanQuery();
foreach (Guid featureGuid in featureGuids)
{
featureFilter.Add(new TermQuery(new Term("FeatureId", featureGuid.ToString())), Occur.SHOULD);
}
filterQuery.Add(featureFilter, Occur.MUST);
}
Filter filter = new QueryWrapperFilter(filterQuery); // filterQuery won't affect result scores
using (IndexSearcher searcher = new IndexSearcher(searchDirectory))
{
//http://stackoverflow.com/questions/9872933/migrating-lucene-hitcollector-2-x-to-collector-3-x
//TopScoreDocCollector collector = TopScoreDocCollector.Create(maxResults, true);
int maxResults = int.MaxValue;
TopDocs hits = searcher.Search(searchQuery, filter, maxResults);
int startHit = 0;
if (pageNumber > 1)
{
startHit = ((pageNumber - 1) * pageSize);
}
totalHits = hits.TotalHits;
int end = startHit + pageSize;
if (totalHits <= end)
{
end = totalHits;
}
int itemsAdded = 0;
int itemsToAdd = end;
QueryScorer scorer = new QueryScorer(searchQuery);
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<span class='searchterm'>", "</span>");
Highlighter highlighter = new Highlighter(formatter, scorer);
highlighter.TextFragmenter = new SimpleFragmenter(highlightedFragmentSize);
示例15: Browse
public static IndexItemCollection Browse(
int siteId,
Guid featureGuid,
DateTime modifiedBeginDate,
DateTime modifiedEndDate,
int pageNumber,
int pageSize,
out int totalHits)
{
totalHits = 0;
IndexItemCollection results = new IndexItemCollection();
using (Lucene.Net.Store.Directory searchDirectory = GetDirectory(siteId))
{
Filter filter = null;
BooleanQuery filterQuery = null;
if ((modifiedBeginDate.Date > DateTime.MinValue.Date) || (modifiedEndDate.Date < DateTime.MaxValue.Date))
{
filterQuery = new BooleanQuery(); // won't be used to score the results
TermRangeQuery lastModifiedDateFilter = new TermRangeQuery(
"LastModUtc",
modifiedBeginDate.Date.ToString("s"),
modifiedEndDate.Date.ToString("s"),
true,
true);
filterQuery.Add(lastModifiedDateFilter, Occur.MUST);
}
if (featureGuid != Guid.Empty)
{
if (filterQuery == null) { filterQuery = new BooleanQuery(); }
BooleanQuery featureFilter = new BooleanQuery();
featureFilter.Add(new TermQuery(new Term("FeatureId", featureGuid.ToString())), Occur.MUST);
filterQuery.Add(featureFilter, Occur.MUST);
}
if (filterQuery != null)
{
filter = new QueryWrapperFilter(filterQuery); // filterQuery won't affect result scores
}
MatchAllDocsQuery matchAllQuery = new MatchAllDocsQuery();
using (IndexSearcher searcher = new IndexSearcher(searchDirectory))
{
int maxResults = int.MaxValue;
TopDocs hits = searcher.Search(matchAllQuery, filter, maxResults);
int startHit = 0;
if (pageNumber > 1)
{
startHit = ((pageNumber - 1) * pageSize);
}
totalHits = hits.TotalHits;
if (startHit > totalHits)
{
startHit = totalHits;
}
int end = startHit + pageSize;
if (totalHits <= end)
{
end = totalHits;
}
int itemsAdded = 0;
int itemsToAdd = end;
for (int i = startHit; i < itemsToAdd; i++)
{
Document doc = searcher.Doc(hits.ScoreDocs[i].Doc);
IndexItem indexItem = new IndexItem(doc, hits.ScoreDocs[i].Score);
results.Add(indexItem);
itemsAdded += 1;
}
results.ItemCount = itemsAdded;
results.PageIndex = pageNumber;
results.ExecutionTime = DateTime.Now.Ticks; // -0;
}
// using (IndexReader reader = IndexReader.Open(searchDirectory, false))
// {
// totalHits = reader.NumDocs();
//.........这里部分代码省略.........