#19193: Upgrading to Lucene.NET 3.0.3

Work Item: 19193

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2013-07-06 16:51:09 -07:00
parent 5fbd15261a
commit a39f56837a
4 changed files with 39 additions and 86 deletions

View File

@@ -1,7 +1,5 @@
using System;
using Lucene.Net.Documents;
using System.Globalization;
using Lucene.Net.Util;
using Orchard.Indexing;
namespace Lucene.Models {
@@ -20,26 +18,26 @@ namespace Lucene.Models {
public int GetInt(string name) {
var field = _doc.GetField(name);
return field == null ? 0 : Int32.Parse(field.StringValue());
return field == null ? 0 : Int32.Parse(field.StringValue);
}
public double GetDouble(string name) {
var field = _doc.GetField(name);
return field == null ? 0 : double.Parse(field.StringValue());
return field == null ? 0 : double.Parse(field.StringValue);
}
public bool GetBoolean(string name) {
return GetInt(name) > 0 ? true : false;
return GetInt(name) > 0;
}
public string GetString(string name) {
var field = _doc.GetField(name);
return field == null ? null : field.StringValue();
return field == null ? null : field.StringValue;
}
public DateTime GetDateTime(string name) {
var field = _doc.GetField(name);
return field == null ? DateTime.MinValue : DateTools.StringToDate(field.StringValue());
return field == null ? DateTime.MinValue : DateTools.StringToDate(field.StringValue);
}
}
}

View File

@@ -89,14 +89,9 @@ namespace Lucene.Services {
return true;
}
var reader = IndexReader.Open(GetDirectory(indexName), true);
try {
using (var reader = IndexReader.Open(GetDirectory(indexName), true)) {
return reader.NumDocs() == 0;
}
finally {
reader.Close();
}
}
public int NumDocs(string indexName) {
@@ -104,21 +99,14 @@ namespace Lucene.Services {
return 0;
}
var reader = IndexReader.Open(GetDirectory(indexName), true);
try {
using (var reader = IndexReader.Open(GetDirectory(indexName), true)) {
return reader.NumDocs();
}
finally {
reader.Close();
}
}
public void CreateIndex(string indexName) {
var writer = new IndexWriter(GetDirectory(indexName), _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
writer.Close();
Logger.Information("Index [{0}] created", indexName);
using (new IndexWriter(GetDirectory(indexName), _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED)) {
}
}
public void DeleteIndex(string indexName) {
@@ -135,6 +123,8 @@ namespace Lucene.Services {
}
public void Store(string indexName, IEnumerable<LuceneDocumentIndex> indexDocuments) {
indexDocuments = indexDocuments.ToArray();
if (!indexDocuments.Any()) {
return;
}
@@ -142,26 +132,14 @@ namespace Lucene.Services {
// Remove any previous document for these content items
Delete(indexName, indexDocuments.Select(i => i.ContentItemId));
var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
LuceneDocumentIndex current = null;
try {
using(var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED)) {
foreach (var indexDocument in indexDocuments) {
current = indexDocument;
var doc = CreateDocument(indexDocument);
writer.AddDocument(doc);
Logger.Debug("Document [{0}] indexed", indexDocument.ContentItemId);
}
}
catch (Exception ex) {
Logger.Error(ex, "An unexpected error occured while add the document [{0}] from the index [{1}].", current.ContentItemId, indexName);
}
finally {
writer.Optimize();
writer.Close();
}
}
public void Delete(string indexName, int documentId) {
@@ -169,18 +147,18 @@ namespace Lucene.Services {
}
public void Delete(string indexName, IEnumerable<int> documentIds) {
documentIds = documentIds.ToArray();
if (!documentIds.Any()) {
return;
}
var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
try {
using(var writer = new IndexWriter(GetDirectory(indexName), _analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED)) {
var query = new BooleanQuery();
try {
foreach (var id in documentIds) {
query.Add(new BooleanClause(new TermQuery(new Term("id", id.ToString())), BooleanClause.Occur.SHOULD));
query.Add(new BooleanClause(new TermQuery(new Term("id", id.ToString())), Occur.SHOULD));
}
writer.DeleteDocuments(query);
@@ -189,9 +167,6 @@ namespace Lucene.Services {
Logger.Error(ex, "An unexpected error occured while removing the documents [{0}] from the index [{1}].", String.Join(", ", documentIds), indexName);
}
}
finally {
writer.Close();
}
}
public IDocumentIndex New(int documentId) {
@@ -207,14 +182,9 @@ namespace Lucene.Services {
return Enumerable.Empty<string>();
}
var reader = IndexReader.Open(GetDirectory(indexName), true);
try {
using(var reader = IndexReader.Open(GetDirectory(indexName), true)) {
return reader.GetFieldNames(IndexReader.FieldOption.ALL).ToList();
}
finally {
reader.Close();
}
}
}
}

View File

@@ -1,5 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
@@ -30,7 +29,7 @@ namespace Lucene.Services {
private bool _asFilter;
// pending clause attributes
private BooleanClause.Occur _occur;
private Occur _occur;
private bool _exactMatch;
private float _boost;
private Query _query;
@@ -53,7 +52,7 @@ namespace Lucene.Services {
}
public ISearchBuilder Parse(string defaultField, string query, bool escape) {
return Parse(new[] { defaultField }, query, escape);
return Parse(new[] {defaultField}, query, escape);
}
public ISearchBuilder Parse(string[] defaultFields, string query, bool escape) {
@@ -135,12 +134,12 @@ namespace Lucene.Services {
}
public ISearchBuilder Mandatory() {
_occur = BooleanClause.Occur.MUST;
_occur = Occur.MUST;
return this;
}
public ISearchBuilder Forbidden() {
_occur = BooleanClause.Occur.MUST_NOT;
_occur = Occur.MUST_NOT;
return this;
}
@@ -155,7 +154,7 @@ namespace Lucene.Services {
}
private void InitPendingClause() {
_occur = BooleanClause.Occur.SHOULD;
_occur = Occur.SHOULD;
_exactMatch = false;
_query = null;
_boost = 0;
@@ -172,13 +171,13 @@ namespace Lucene.Services {
// comparing floating-point numbers using an epsilon value
const double epsilon = 0.001;
if (Math.Abs(_boost - 0) > epsilon) {
_query.SetBoost(_boost);
_query.Boost = _boost;
}
if (!_exactMatch) {
var termQuery = _query as TermQuery;
if (termQuery != null) {
var term = termQuery.GetTerm();
var term = termQuery.Term;
// prefixed queries are case sensitive
_query = new PrefixQuery(term);
}
@@ -259,14 +258,16 @@ namespace Lucene.Services {
Query resultQuery = booleanQuery;
if (_clauses.Count == 0) {
if (_filters.Count > 0) { // only filters applieds => transform to a boolean query
if (_filters.Count > 0) {
// only filters applieds => transform to a boolean query
foreach (var clause in _filters) {
booleanQuery.Add(clause);
}
resultQuery = booleanQuery;
}
else { // search all documents, without filter or clause
else {
// search all documents, without filter or clause
resultQuery = new MatchAllDocsQuery(null);
}
}
@@ -302,11 +303,11 @@ namespace Lucene.Services {
return Enumerable.Empty<ISearchHit>();
}
try {
using (searcher) {
var sort = String.IsNullOrEmpty(_sort)
? Sort.RELEVANCE
: new Sort(new SortField(_sort, _comparer, _sortDescending));
var collector = TopFieldCollector.create(
var collector = TopFieldCollector.Create(
sort,
_count + _skip,
false,
@@ -318,18 +319,14 @@ namespace Lucene.Services {
searcher.Search(query, collector);
var results = collector.TopDocs().ScoreDocs
.Skip(_skip)
.Select(scoreDoc => new LuceneSearchHit(searcher.Doc(scoreDoc.doc), scoreDoc.score))
.ToList();
.Skip(_skip)
.Select(scoreDoc => new LuceneSearchHit(searcher.Doc(scoreDoc.Doc), scoreDoc.Score))
.ToList();
Logger.Debug("Search results: {0}", results.Count);
return results;
}
finally {
searcher.Close();
}
}
public int Count() {
@@ -345,16 +342,12 @@ namespace Lucene.Services {
return 0;
}
try {
using (searcher) {
var hits = searcher.Search(query, Int16.MaxValue);
Logger.Information("Search results: {0}", hits.ScoreDocs.Length);
var length = hits.ScoreDocs.Length;
return Math.Min(length - _skip, _count);
}
finally {
searcher.Close();
}
}
public ISearchBits GetBits() {
@@ -370,30 +363,22 @@ namespace Lucene.Services {
return null;
}
try {
using (searcher) {
var filter = new QueryWrapperFilter(query);
var bits = filter.GetDocIdSet(searcher.GetIndexReader());
var disi = new OpenBitSetDISI(bits.Iterator(), searcher.MaxDoc());
var bits = filter.GetDocIdSet(searcher.IndexReader);
var disi = new OpenBitSetDISI(bits.Iterator(), searcher.MaxDoc);
return new SearchBits(disi);
}
finally {
searcher.Close();
}
}
public ISearchHit Get(int documentId) {
var query = new TermQuery(new Term("id", documentId.ToString(CultureInfo.InvariantCulture)));
var searcher = new IndexSearcher(_directory, true);
try {
using (var searcher = new IndexSearcher(_directory, true)) {
var hits = searcher.Search(query, 1);
Logger.Information("Search results: {0}", hits.ScoreDocs.Length);
return hits.ScoreDocs.Length > 0 ? new LuceneSearchHit(searcher.Doc(hits.ScoreDocs[0].doc), hits.ScoreDocs[0].score) : null;
}
finally {
searcher.Close();
return hits.ScoreDocs.Length > 0 ? new LuceneSearchHit(searcher.Doc(hits.ScoreDocs[0].Doc), hits.ScoreDocs[0].Score) : null;
}
}
}
}