Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheSolr,需要单个字段的多个字段,同时优化查询以仅命中特定索引_Java_Search_Solr - Fatal编程技术网

Java ApacheSolr,需要单个字段的多个字段,同时优化查询以仅命中特定索引

Java ApacheSolr,需要单个字段的多个字段,同时优化查询以仅命中特定索引,java,search,solr,Java,Search,Solr,我的数据在solr中进行分区,因此当我发送请求“+apple”(必需的apple)时,我只点击分区“a”进行搜索。 由于这种优化,我无法轻松使用跨越所有数据的布尔逻辑 Solr查询:+水果:班纳纳+水果:苹果 结果:两个字段都没有结果,因此我得到0个结果,因为我正在搜索两个必填字段的“a”分区和“b”分区。在这种情况下,水果字段的记录不太可能有两个名称,但是这是一个多值字段,所以这是可能的,我希望这些记录位于solr结果的顶部 获取我想要的内容的一种方法是将查询更改为:水果:班纳果:苹果 然而。

我的数据在solr中进行分区,因此当我发送请求“+apple”(必需的apple)时,我只点击分区“a”进行搜索。 由于这种优化,我无法轻松使用跨越所有数据的布尔逻辑

Solr查询:+水果:班纳纳+水果:苹果

结果:两个字段都没有结果,因此我得到0个结果,因为我正在搜索两个必填字段的“a”分区和“b”分区。在这种情况下,水果字段的记录不太可能有两个名称,但是这是一个多值字段,所以这是可能的,我希望这些记录位于solr结果的顶部

获取我想要的内容的一种方法是将查询更改为:水果:班纳果:苹果 然而。。。这有时会返回既不是apple也不是bananna的结果,因为solr将两者都标记为可选,因此我允许它搜索我的所有索引。例如: 水果:班纳纳水果:苹果国家:墨西哥 这可能会把橘子送回墨西哥。。。在这种情况下,我宁愿得到0个结果

另外,执行两个单独的查询不是一个选项……有人知道更好的方法来获得分区优化的“必需”或“必需”功能吗


我也对其他设计持开放态度,我只是在寻找输入。

您的示例
水果:香蕉水果:苹果
不应该给出任何不包含至少一个这些术语的点击。你有这样的例子吗?当您将
debug=all
附加到查询中以获取完整的评分信息时,这些文档的输出是什么?您是正确的。我更新了我的问题,使之更清楚。但是,我不认为弄乱权重会让它们足够低,以至于完全从结果中消失。如果你想表示
国家:墨西哥
苹果
香蕉
一起是必需的,你可以用布尔逻辑来表示:
水果:(香蕉或苹果)国家和地区:墨西哥
。如果您希望至少出现两个术语,可以将eDiscoveryMax处理程序与
q=mexico-apple-banana&mm=2
-这将为您提供香蕉或墨西哥的苹果,或同时引用苹果和香蕉的文档。你必须明确地表达你的意思;Solr无法从您键入的内容推断出含义。您还可以使用
fq=Country:Mexico
将文档筛选到匹配的文档。我暂时停止了此操作,但回来后,我想知道您是否有其他建议。我也稍微澄清了我的困境@Matslindhi如果您想要特定的搜索行为,您必须将该行为作为适当的查询来编写-即使用或和来指示哪些术语组合是可选的,哪些是必需的。在您的查询中,或者通过使用筛选查询在主搜索之后进一步筛选文档(这实际上将使查询与原始查询一致,而不影响分数)。