也许有人可以告诉我Solr如何匹配条款。所以我有一个名为assignedBy的字符串属性,我使用值“Aaron Mason”(没有引号)对此属性进行查询。 Solr返回的匹配次数超出了我的预期,因为术语“Mason”也匹配其他字段中包含单词“Mason”的文档。通过打开调试功能(来自Solr管理员),我看到Solr将查询分解为两个属性查询 - “assign”的“aaron”和“catch-all text 的”mason“(见下文)。这是正确的行为吗?如何确保它只查找与我指定的属性匹配的内容?感谢。
"debug":{
"rawquerystring":"assignedBy:Aaron Mason",
"querystring":"assignedBy:Aaron Mason",
"parsedquery":"assignedBy:aaron _text_:mason",
"parsedquery_toString":"assignedBy:aaron _text_:mason",
答案 0 :(得分:2)
q=assignedBy:Aaron Mason
在解析查询之后,基于您在模式文件中查询标记生成器,它看起来像
assignedBy:aaron
和_text_:mason
。
如果您没有指定字段名称,则在默认字段(在solrconfig.xml文件中设置)中搜索queryterm,您可以在<str name="df">text</str>
处理程序下查找/select
。在您的情况下,它可能是_text_
。
因此,Solr搜索其索引并检索具有字段assignedBy
的所有文档的组合结果,其中包含术语&#34; Aaron&#34;以及所有包含字段_text_
且带有术语&#34; mason&#34;。
您可能已使用copyfield将某些字段值复制到 text 字段。检查它。
您可以使用dismax / edismax,您可以在哪个字段中指定要搜索的所有字词 例如:
q=Aaron Mason&wt=json&debugQuery=on&defType=dismax&qf=assignedBy
这只能找到与该字段匹配的内容&#34; assignedBy&#34;在qf