Lucene.Net - странное поведение на разных серверах

Я писал поиск одного из наших сайтов: (САЙТ A)

BooleanQuery booleanQuery = new BooleanQuery();

 foreach (var field in fields)
 {
 QueryParser qp = new QueryParser(field, new StandardAnalyzer());
 Query query = qp.Parse(search.ToLower() + "*");
 if (field.Contains("Title")) { query.SetBoost((float)1.8); }
 booleanQuery.Add(query, BooleanClause.Occur.SHOULD); 
 }

 // CODE DIFFERENCE IS HERE
 Query query2 = new TermQuery(new Term("StateProperties.IsActive", "True"));
 booleanQuery.Add(query2, BooleanClause.Occur.MUST);
 // END CODE DIFFERENCE

 Lucene.Net.Search.TopScoreDocCollector collector = Lucene.Net.Search.TopScoreDocCollector.create(21, true);

 searcher.Search(booleanQuery, collector);
 hits = collector.TopDocs().scoreDocs;

это работало, как ожидалось. поскольку у нас есть несколько сайтов, и они используют один и тот же скелет, я загрузил поиск на другой сайт (САЙТ B), но поиск прекратил возвращать результаты. после того, как я сыграл раунд с кодом, мне удалось заставить его работать так: (показывая только переписывающие строки кода)

QueryParser qp2 = new QueryParser("StateProperties.IsActive", new StandardAnalyzer());
Query query2 = qp2.Parse("True");
booleanQuery.Add(query2, BooleanClause.Occur.MUST);

кто-нибудь знает, почему это происходит? я проверил версию Lucene dll и ее ту же версию на обоих сайтах (2.9.2.2)

это код, который я написал на САЙТЕ Неправильно? код SITE B неправильный? это моя вина? может ли сервер производства заражать что-то вроде этого?

1 ответ

Разве у них нет отдельных индексов на диске? Если они были проиндексированы по-разному, они также будут возвращать разные результаты. Одна вещь, которая приходит на ум, - это то, что имеет значение какая-то чувствительность к регистру, потому что TermQuery будет искать соответствие EXACT, где, поскольку парсер будет пытаться подделать/фильтровать поисковый запрос в соответствии с анализатором (и, вероятно, искать "true" вместо "True".

licensed under cc by-sa 3.0 with attribution.