我正在使用Apache Lucene的版本4.4 。
在我的系统的第一个版本中,我将带有SpanishAnalyzer
的文档集合编入五个不同的字段。
在当前版本中,我意识到SpanishAnalyzer
阻止了我的名字和姓氏,Martinez和Martin对于该系统来说是相同的。因此,我使用PerFieldAnalyzerWrapper
来维护SpanishAnalyzer
作为默认分析器,并使用另一个名称对名称进行索引,即StopAnalyzer
。
这是有效的,并且名称和姓氏不会被阻止。搜索者具有相同的PerFieldAnalyzerWrapper
分析器。
但是,分数计算与第一个版本不同。它会产生奇怪的事情(是的,我有一个更好的解释)。似乎混合分析器会给某些字段带来更多分数(当每个字段都有boost
1时)。我在混合BooleanQueries时也尝试了类似的东西。
(BooleanQuery(BooleanQuery(A or B) or C))
是否有人知道这些混合物(分析器或BooleanQueries)是否应该改变分数?
版本1 名称为
Analyzer analyzer = new SpanishAnalyzer(LUCENE_VERSION);
IndexWriterConfig iwc = new IndexWriterConfig(LUCENE_VERSION, analyzer);
版本2 名称未被阻止
Map<String,Analyzer> specificAnalyzers = new HashMap<String,Analyzer>();
/* Author field has a stop analyzer so that names and surnames
* are not stemmed, and Martinez is not the same as Martin. */
specificAnalyzers.put(AUTHOR_FIELD, new StopAnalyzer(LUCENE_VERSION));
PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(
new SpanishAnalyzer(LUCENE_VERSION), specificAnalyzers);
IndexWriterConfig iwc = new IndexWriterConfig(LUCENE_VERSION, analyzer);