solr - solr 8.4.1 搜索忽略重复的短语
问题描述
我们正在使用 Solr 8.4.1 从文档中搜索产品。我希望确切的短语排在首位,但我也希望如果同一短语在文档中重复多次,那么它应该只计算一次。现在,那些在文档中多次具有相同短语的关键字排在首位,因为它们获得了更高的分数。
鉴于我正在搜索,请查看下面的结果"pipes"
。找到了 7 个结果,但prod_id:297720
命名my pipes pipes
的分数与 不同 prod_id:3064
。
根据我们的需要,两者应该具有相同的分数。我想忽略在文档中找到的重复短语。
我们正在使用相似性类<similarity class="solr.BM25SimilarityFactory"/>
下面给出的搜索字段架构为
<field name="product_related_kword" type="text_general" indexed="true" stored="true" />
结果是:
{
"responseHeader":{
"status":0,
"QTime":222,
"params":{
"q":"product_related_kword:pipes",
"fl":"product_name,score,product_related_kword,prod_id,member_classified_slno,member_id",
"start":"0",
"rows":"100",
"debugQuery":"on"}},
"response":{"numFound":7,"start":0,"maxScore":2.7593598,"docs":[
{
"prod_id":297720,
"product_name":"my pipes pipes",
"member_classified_slno":123457327,
"member_id":"11111327",
"product_related_kword":"my pipes pipes 00",
"score":2.7593598},
{
"prod_id":3064,
"product_name":"pipes",
"member_classified_slno":123457560,
"member_id":"11119579",
"product_related_kword":"pipes 00",
"score":2.5436506},
{
"prod_id":3064,
"product_name":"pipes",
"member_classified_slno":123457544,
"member_id":"11113186",
"product_related_kword":"pipes 00",
"score":2.5436506},
{
"prod_id":3064,
"product_name":"pipes",
"member_classified_slno":123457546,
"member_id":"11113636",
"product_related_kword":"pipes 00",
"score":2.5436506},
{
"prod_id":3064,
"product_name":"pipes",
"member_classified_slno":123457551,
"member_id":"11119238",
"product_related_kword":"pipes 00",
"score":2.5436506},
{
"prod_id":3064,
"product_name":"pipes",
"member_classified_slno":123457553,
"member_id":"785565531",
"product_related_kword":"pipes 00",
"score":2.5436506
}
]
},
解决方案
将以下过滤器添加到您的索引分析器。
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
这将从流中删除重复的令牌。如果您有同义词,请在同义词过滤器之后添加它以获得更好的结果。
在下一页检查 RemoveDuplicatesTokenFilterFactory
https://lucene.apache.org/solr/guide/8_4/filter-descriptions.html
推荐阅读
- react-native - 如何在应用程序中添加 react-native expo 用户登录
- ios - Xcode 12 错误:多个命令产生 Charts.framework
- python - 只运行一次 Airflow Dag
- c - 将 32 位地址分成几部分
- powershell - 用于在调度程序中搜索特定任务并删除此任务的脚本
- python - 休息 API Python 请求:响应 [400]
- flutter - PageView 容器不会限制最大宽度或高度抖动
- azure - Microsoft MIP JAVA SDK 示例错误:“无法识别的异常:profile_add_engine_async”
- angular - 在 Chromium 上使用 Angular 刷新嵌入式 PDF
- sql - 如何将表A中的行插入表B中不在表B中的行