如何根据最佳匹配而不是过滤来搜索没有一个字词的数据库行?我可以使用通用的标记器或过滤器吗?
例如,如果我的搜索条件是:
greek american
然后结果集应包含greek
OR american
的所有字符串
如果数据库具有以下行:
german food
americans in paris
greek americans
thai food
greek food
然后它应该返回顶部的最佳匹配,即使它可能没有全部/部分搜索词:
greek americans
greek food
americans in paris
答案 0 :(得分:1)
这是Solr默认执行的操作。也许得分手不符合您的期望,您应该打开debugQuery以更好地理解分数的计算方式。
根据您的示例,您应该确保分析仪执行词干分析,以便以相同的方式分析american
和americans
。
当开始使用使用TF-IDF进行评分的工具时,可能令人困惑的一件事是它给予稀有术语更多机会进行排名。例如,如果american
在您的索引中比greek
更常见,则greek restaurant
的查询可能会使希腊博物馆的排名高于美国餐馆。
您可以自行编写Similarity来自定义分数的计算方法。
答案 1 :(得分:0)
听起来我的默认操作符是“AND”。以下内容应该在schema.xml文件中的某个位置:
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="AND"/>
如果您希望默认情况下为“或”,请使用<solrQueryParser defaultOperator="OR"/>
。否则,在查询中使用显式OR:
?q=(greek OR american)
如果您发布schema.xml文件的相关部分,也许我可以帮助解决更多问题。