簡體   English   中英

Solr過濾器查詢單據值

[英]solr filter query on document value

我正在尋找一種解決方案,其中很長的查詢字符串返回414 http響應。 一些查詢可以達到10,000個字符,我可以看看更改apache / jetty允許的字符數,但是我寧願不允許我的Web服務器讓任何人張貼10,000個字符。

Solr中有一種方法可以將較大的查詢字符串保存在文檔中並在過濾的查詢中使用它嗎?

select?q=*:*&fq=id:123這將返回整個文檔,但是有一種方法可以在查詢中返回文檔123中字段的值

id123文檔中的字段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,您可以使用hashlibhashlib長字符串的哈希值,並通過使用sha256獲取結果字符串,如果您使用的是十六進制格式,則可以將其用於索引和查詢,為64字節;如果您使用十六進制格式,則為44字節。正在使用base64。

例:

>>> import hashlib
>>> hashlib.sha256(b"long_query_string_here").hexdigest()
'19c9288c069c47667e2b33767c3973aefde5a2b52d477e183bb54b9330253f1e'

然后,您將19c92...值存儲在Solr中,並在有查詢值時進行相同的轉換。

fq=hashed_id:19c9288c069c47667e2b33767c3973aefde5a2b52d477e183bb54b9330253f1e

在尋求字面意義的解決方案之前,可能要尋找的替代方法是:

  1. 您可以將查詢POST到Solr而不是使用GET。 對此沒有URL限制
  2. 如果您要發送一長串的ID並使用OR構造,則可以使用其他查詢解析器來提高其效率(例如TermsQueryParser
  3. 如果您具有恆定(或半恆定)查詢參數,則可以將它們作為請求處理程序(在solrconfig.xml中)的缺省值分解出來。 您可以根據需要創建任意數量的請求處理程序,並且可以覆蓋默認值,因此有效地允許您預定義查詢的類/類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM