我用德语索引数据,但结果不太好,所以我试图找到一种方法并改进搜索。
架构非常简单:
<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? 这样我就能知道哪种词干效果更好。
答案 0 :(得分:2)
首先,你是什么意思结果不好。你找不到你想要的东西吗?排序/排名错了吗?有几种方法可以调整它。
由于您提到了架构和配置,我认为单词与您希望它们匹配的方式不匹配。
我通常会使用稍微不同的配置同时设置多种类型,并使用Solr Admin中的分析标签(http://localhost:8080/solr/#/CORE/analysis
)。然后我列出一些典型的句子和查询,并尝试使用不同的类型,看看会发生什么以及它们如何匹配。
如果您已有应用程序,则更容易。从您的日志和重要或热门标题中查找热门查询。对我来说,大多数时候,“中等”和更具侵略性的词干分析器给出非常相似的结果。但是光线干扰器可以产生很大的不同。如果你匹配长而自然的文本,强大的词干通常是一个很好的选择,如果你匹配特定的名称或产品,轻量词可以提供更好的结果。
词干并不是唯一对您的架构很重要的东西。您似乎有默认的禁用词列表。确保调整该列表。索引中较少的停用词意味着更好的得分。转到Solr Admin中的模式浏览器,然后选择您的标题字段。加载前100个术语的信息。如果那里有任何无意义的单词,请将这些单词添加到停用词列表中(需要重新索引)。还要检查数字等其他内容。这可能表明您的Tokenizer需要进行调整并杀死它们(除非,它们对您很重要,但对我来说,单位数通常不会增加任何值)。
如果你真的只有一个字段(我通常有多个字段),那么将数据从一个字段复制到另一个字段中是不同类型的,这是一种好的,简单的方法。但A / B测试仍然必须在您的应用程序中进行。例如,您需要将10%的查询发送到其他字段并监控转化(喜欢的项目,购买的产品或衡量成功的程度)。
如果您的架构变得更复杂,请使用两个核心。我总是拥有自己选择的核心(现场核心)和核心核心(挑战活核心的核心)。此策略需要将数据索引两次(将数据发送到core1和core2),每个核心一次。但是它允许你测试的不仅仅是场地类型,你也可以玩不同的得分等。同样,您需要找到一种方法来跟踪候选核心的成功程度。
答案 1 :(得分:0)
您可以通过在索引中创建具有不同底层fieldTypes的多个字段来执行AB测试,这些字段实现了您要测试的相应FilterFactories。您可以利用solr copyField指令将title
字段复制到不同的字段中进行测试。