我正在使用solr来完成我的工作而且非常棒。但是,我无法生成更精细的搜索结果。
我正在寻找他们的产品名称,品牌,性别和类别(礼服鞋,夹克等)。品牌生活在“品牌”数据库表中,类别和性别相同。产品位于“产品”数据库表中,该表是外键,可用于品牌,类别和性别表。
我将所有这些加载到solr中,我可以毫不费力地进行加权排名搜索。这将给出最相似的产品,受某些领域的影响。我想要做的是下一步是找到任何搜索字符串的每个字段的完全匹配。例如:
搜索字符串:“Michael Kors浅绿色男士礼服鞋”
应该匹配:
品牌:
颜色
性别:
类别:
谢谢:)
答案 0 :(得分:0)
您可以尝试使用布尔查询 布尔查询包含多个子句。
http://localhost:8983/solr/query?q=(Brands:"Michael Kors") AND (Colours:"Light Green") AND (Category:(Dress Shoes OR Shoes))
答案 1 :(得分:0)
@mils 更多寻找搜索结果,您应该考虑使用不同的查询解析器。如果任何可用的查询解析器适合您,我认为此链接值得一读。 https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-TermsQueryParser
答案 2 :(得分:0)
您可以将架构字段从文本更改为字符串。那会给你完全匹配 - 但是你必须自己处理上/下的情况。
Dismax和Edismax解析器将为您提供搜索多个字段的最简单选项。
答案 3 :(得分:0)
这实际上是关于“文本标记”的问题(有时也称为“named entity recognition”)。
在你所追求的背景下,Daniel Tunkelang认为这是"Query Understanding"的重要组成部分。
Lucene有一些可用于实现此类功能的数据结构(请参阅OpenSextant project作为示例),但Solr不提供此功能(超出使用上述带状疱疹的近似解决方案)
这很难的原因是,在运行查询之前,您需要在您关注的每个字段中查询查询中每个术语/词组的文档频率信息!。
缓慢,不优雅的Solr解决方案:
如果您愿意运行两个查询,则可以使用构面近似您的目标:
(这里一个很好的副作用是你的查询更窄将能够在构造Q2时看到从Q1返回的总计数和方面计数,所以你可以决定省略/放松某些限制应该匹配结果的数量下降得太低)