Java 在Solr中添加自定义查询参数的正确方法

Java 在Solr中添加自定义查询参数的正确方法,java,search,solr,lucene,Java,Search,Solr,Lucene,我目前正在运行Solr客户机/服务器对,该对工作正常 但是,在某些情况下,发送到Solr的筛选器查询(fq参数)非常大(可以是数千个字符),并且无法缩减。随着查询解析的进行,我想尝试压缩这个查询部分并将其发送给Solr 我正在考虑修改客户端,以便它使用另一个参数(例如zfq),而不是fq。Solr然后可以决定-如果它接收到zfq,它将使用它并将数据解码为fq。否则它应该像往常一样 实现上述目标的标准方法是什么?看起来有SearchHandler,requestHandler,您可以让您的Solr

我目前正在运行Solr客户机/服务器对,该对工作正常

但是,在某些情况下,发送到Solr的筛选器查询(
fq
参数)非常大(可以是数千个字符),并且无法缩减。随着查询解析的进行,我想尝试压缩这个查询部分并将其发送给Solr

我正在考虑修改客户端,以便它使用另一个参数(例如
zfq
),而不是
fq
。Solr然后可以决定-如果它接收到
zfq
,它将使用它并将数据解码为
fq
。否则它应该像往常一样


实现上述目标的标准方法是什么?看起来有
SearchHandler
requestHandler
您可以让您的Solr容器占用非常长的URL:

如果
fq
s有一些默认值,您可以创建一个默认包含它的查询解析器

  <requestHandler name="for_some_queries" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <str name="fq">MY VERY LONG FQ</str>
     </lst>
  </requestHandler>

明确的
我的很长的FQ


但是我同意Mauricio Scheffer关于更好设计的观点。

您是否考虑过使用这种语法-category:(1 2 3 4…N)。这将使字符串减少90%。比压缩要好。

一个
fq
中包含数千个字符似乎不正确。与其试图绕过这些限制,不如问问自己为什么你会碰到这些限制。描述你真正的问题。真正的问题超出了这个问题的范围。但是如果你想听的话-当然,没问题!长度取决于权限的实现方式。对于具有广泛权限集的客户,筛选查询如下所示:“:-category:1和-category:2和…-category:N”。当模式重复时,哪一个是压缩的最佳候选者。您见过关于文档级安全性的JIRA问题吗?感谢您的链接,但在这个阶段我无法更改现有的体系结构,尤其是这只是一个补丁,而不是官方Solr发行版的一部分。我只是想做个实验,就这样。你有没有想过使用这个语法-category:(1234…N)。这将使字符串减少90%。比压缩更好。
fq
永远不会保持不变,因此将其设为默认值也无济于事。我真正的问题是如何扩展Solr,而不是如何解决这个问题。错误的假设:-)但是增加应用程序容器的标题长度(因此URL长度)不会解决你的问题吗?我已经这样做了,但我想尝试存档查询,看看这是否有助于减少延迟。我希望悬赏积分没有过期,因为你花了太长时间才发布答案:(