![](/img/trans.png)
[英]Solr query to filter document with at least one value in array except of specified values
[英]solr filter query on document value
我正在尋找一種解決方案,其中很長的查詢字符串返回414 http響應。 一些查詢可以達到10,000個字符,我可以看看更改apache / jetty允許的字符數,但是我寧願不允許我的Web服務器讓任何人張貼10,000個字符。
Solr中有一種方法可以將較大的查詢字符串保存在文檔中並在過濾的查詢中使用它嗎?
select?q=*:*&fq=id:123
這將返回整個文檔,但是有一種方法可以在查詢中返回文檔123中字段的值
id
為123
文檔中的字段queryValue
將為Intersects((LONGSTRING))
因此,有沒有辦法做類似select?q=*:*&fq=foo:{id:123.queryValue}
事情select?q=*:*&fq=foo:{id:123.queryValue}
這將與select?q=*:*&fq=foo:Intersects((LONGSTRING))
嗎?
兩種可能性:
加盟
您可以使用Join查詢解析器從一個集合/核心中獲取結果,並使用該結果過濾另一個核心中的結果,但是當您討論較大的安裝和數據大小時,有幾個限制將是相關的。 您必須進行試驗,看看這是否適用於您的用例。
散列
只要您只進行完全匹配,就可以在索引和查詢時在客戶端對字符串進行哈希處理。 具體如何執行將取決於您選擇的語言。 對於python,您可以使用hashlib
來hashlib
長字符串的哈希值,並通過使用sha256
獲取結果字符串,如果您使用的是十六進制格式,則可以將其用於索引和查詢,為64字節;如果您使用十六進制格式,則為44字節。正在使用base64。
例:
>>> import hashlib
>>> hashlib.sha256(b"long_query_string_here").hexdigest()
'19c9288c069c47667e2b33767c3973aefde5a2b52d477e183bb54b9330253f1e'
然后,您將19c92...
值存儲在Solr中,並在有查詢值時進行相同的轉換。
fq=hashed_id:19c9288c069c47667e2b33767c3973aefde5a2b52d477e183bb54b9330253f1e
在尋求字面意義的解決方案之前,可能要尋找的替代方法是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.