gpt4 book ai didi

solr - Solr 中的 "protected phrase"

转载 作者:行者123 更新时间:2023-12-02 04:11:18 25 4
gpt4 key购买 nike

我的一位客户是一家专门从事新闻摄影(嗯,还有八卦)的摄影机构,因此他们的许多客户的搜索都围绕着特定的人展开。

我们索引了大约 150 万个文档,对标题和标题进行全文搜索;和全文搜索,无需词干标签。我们有一个不错的停用词列表,他们提供了一个 protected 词列表,他们认为这些词的词干不正确。
我们正在使用 Dismax 搜索标题、标题和标签,并具有不同的提升)
这一切都很好。

然而,事实证明,有些人很难做到正确。例如,阿尔·戈尔。在意大利语中,“al”是一个停用词,因此对 `al gore'(不带引号)的简单查询变为:

+((DisjunctionMaxQuery((caption_text:gor | tags_text:gore^100.0 | headline_text:gor)))~1) ()

这确实为前副总裁带来了点击率,当然也为“Lesley Gore”和“Tipper Gore”带来了命中率;而且,由于词干,“Gori”等的点击率。
暂时搁置排序,它确实使结果困惑,我想做得更好。

用引号括起搜索词无济于事,无论如何,“al”都会被剥离。
将“gore”标记为 protected 词让我成功了一半,从而限制了误报的数量。
我也尝试使用 SynonymFilterFactory,但并没有走得太远——我将 SynonymFilterFactory 作为第一个过滤器,所以无论如何“al”都会被删除。

我认为我真正需要的是一种将“al gore”标记为单个标记的方法。对于一组可配置的“短语”,有什么可以让我这样做的吗?
我忽略了另一种方法吗? solr.CommonGramsFilterFactory 也许?

更多背景信息:我们使用的是 Solr 1.4.0。
schema.xml 的相关部分
<!-- used for headline and caption -->
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.it.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="Italian" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.it.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="Italian" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>

<fieldType name="tagsText" class="solr.TextField" sortMissingLast="true" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.it.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.it.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>

最佳答案

你看过CommonGramsFilterFactory吗?
它会:

  • 将多个 token 组合成一个
    token
  • 通常用于搜索包含停用词的短语
  • 关于solr - Solr 中的 "protected phrase",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050194/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com