我正在寻找一个解决方案,我的很长的查询字符串返回414 http响应。有些查询可以达到10,000个字符,我可以看看改变了apache / jetty允许的字符数,但我宁愿不允许我的网络服务器让任何人发布10,000个字符。
在solr中是否有办法在文档中保存大型查询字符串并在过滤后的查询中使用它?
select?q=*:*&fq=id:123
- 这会返回一个完整的文档,但有没有办法在查询中返回文档123中字段的值
包含queryValue
id
的文档中的字段123
将为Intersects((LONGSTRING))
有没有办法做select?q=*:*&fq=foo:{id:123.queryValue}
这与select?q=*:*&fq=foo:Intersects((LONGSTRING))
相同?
答案 0 :(得分:1)
两种可能性:
<强>加入强>
您可以使用Join查询解析器从一个集合/核心获取结果,并使用它来过滤不同核心的结果,但是当您谈论更大的安装和数据大小时,有一些限制将是相关的。您必须尝试查看这是否适用于您的用例。
<强>散列强>
只要您只进行完全匹配,在索引和查询时在客户端散列字符串。具体如何执行此操作取决于您选择的语言。对于python,您将使用hashlib
获取长字符串的哈希值,并使用sha256
,您将获得一个结果字符串,您可以使用它来索引和查询64字节,如果你是如果您使用的是base64,请使用十六进制表格。
示例:
>>> import hashlib
>>> hashlib.sha256(b"long_query_string_here").hexdigest()
'19c9288c069c47667e2b33767c3973aefde5a2b52d477e183bb54b9330253f1e'
然后,您将在Solr中存储19c92...
值,并在您查询之后获得相同的转换。
fq=hashed_id:19c9288c069c47667e2b33767c3973aefde5a2b52d477e183bb54b9330253f1e
答案 1 :(得分:1)
在您寻求的文字解决方案之前,可能有其他方法可以解决您的问题: