3

我用德语索引数据,但结果不是很好,所以我试图找到一种方法并改进搜索。

架构非常简单:

<fields>
           <field name="id" type="string" indexed="true" stored="true" required="true" /> 
           <field name="title" type="text_de" indexed="true" stored="true" required="true" />
           <field name="_version_" type="long" indexed="true" stored="true" multiValued="false" />
        </fields>

标题是这样配置的:

<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
      <analyzer> 
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball" enablePositionIncrements="true"/>
        <filter class="solr.GermanNormalizationFilterFactory"/>
        <filter class="solr.GermanLightStemFilterFactory"/>
        <!-- less aggressive: <filter class="solr.GermanMinimalStemFilterFactory"/> -->
        <!-- more aggressive: <filter class="solr.SnowballPorterFilterFactory" language="German2"/> -->
      </analyzer>
   </fieldType>

如果我应该选择“不那么激进”或“更激进”的过滤器而不是 GermanLightStemFilterFactory,我该如何决定要进行哪些改进?

我可以在查询期间进行 AB 测试吗?一个查询告诉 solr 使用 GermanMinimalStemFilterFactory,另一个查询使用 SnowballPorterFilterFactory?这样我就可以知道哪个词干表现更好。

4

2 回答 2

2

首先,你说的结果不好是什么意思。你没有找到你要找的东西吗?排序/排名是否错误?有几种方法可以对此进行调整。

由于您提到了您的架构和配置,我假设单词与您希望它们匹配的方式不匹配。

寻找合适的类型开始

我通常一次设置几种类型,配置略有不同,并使用Solr Admin ( )中的分析选项卡。http://localhost:8080/solr/#/CORE/analysis然后我列出了一些典型的句子和查询,并用不同的类型尝试它们,看看会发生什么以及它们是如何匹配的。如果您已经有一个应用程序,那就更容易了。从您的日志和重要或热门标题中查找热门查询。对我来说,大多数时候“中等”和更激进的词干分析器会给出非常相似的结果。但是光干器可以产生很大的不同。如果您要匹配长而自然的文本,那么强大的词干分析器通常是一个不错的选择,如果您要匹配特定的名称或产品,轻词干提取器会提供更好的结果。

其他过滤器

词干并不是架构中唯一重要的事情。您似乎有默认的停用词列表。确保调整该列表。索引中的停用词越少意味着得分越高。转到Solr Admin 中的模式浏览器并选择您的标题字段。加载前 100 个术语信息。如果其中有任何无意义的词,请将这些词添加到您的停用词列表中(需要重新索引)。还要检查其他的东西,比如数字。这可能表明您的 Tokenizer 需要调整并杀死它们(除非它们对您很重要,但对我来说,单个数字通常没有任何价值)。

A/B 测试

如果你真的只有一个字段(我通常有多个),将数据从一个字段复制到另一个具有不同类型的字段是一种很好且简单的开始方法。但是 A/B 测试仍然必须在您的应用程序中进行。例如,您需要将 10% 的查询发送到其他字段并监控转换(喜欢的项目、购买的产品或衡量成功的方式)。

如果您的架构变得更复杂,请使用两个核心。我总是有我选择的核心(活跃的核心)和候选核心(挑战活跃核心的核心)。此策略需要索引您的数据两次(将您的数据发送到 core1 和 core2),每个核心一次。但它允许您测试的不仅仅是字段类型,您还可以使用不同的得分等。同样,您需要找到一种方法来跟踪候选人核心的成功程度。

于 2013-04-30T11:20:15.237 回答
0

您可以通过在索引中创建多个具有不同基础 fieldTypes 的字段来执行 AB 测试,这些字段实现了您想要测试的各个 FilterFactories。您可以利用 solr copyField指令将您的title字段复制到不同的字段中进行测试。

于 2013-04-29T16:54:37.107 回答