空間搜尋
Solr 支援位置資料,用於空間/地理空間搜尋。
使用空間搜尋,您可以
-
為點或其他形狀建立索引
-
依據邊界框或圓形或其他形狀篩選搜尋結果
-
依據點之間的距離或矩形之間的相對面積來排序或加強評分
-
產生 2D 格線的分面計數數字,用於熱圖產生或點繪圖。
空間搜尋有四種主要欄位類型可用
-
LatLonPointSpatialField
(預設已啟用docValues
) -
PointType
-
SpatialRecursivePrefixTreeFieldType
(簡稱 RPT),包括衍生類型RptWithGeometrySpatialField
-
BBoxField
LatLonPointSpatialField
是用於經緯度點資料最常見使用案例的理想欄位類型。RPT 為更進階/自訂的使用案例和選項(例如多邊形和熱圖)提供更多功能。
RptWithGeometrySpatialField
用於索引和搜尋非點資料,雖然它也可以處理點。它無法進行排序/加強。
BBoxField
用於索引邊界框、依框查詢、指定搜尋述詞(相交、在內、包含、不相交、等於)以及相關性排序/加強(例如重疊比例或僅僅是面積)。
本指南中未提及的一些深奧細節,可在 Solr Wiki 的空間搜尋章節中找到。
LatLonPointSpatialField
以下是 LatLonPointSpatialField
(LLPSF) 在結構描述中通常應如何組態
<fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>
LLPSF 支援切換 indexed
、stored
、docValues
和 multiValued
。當啟用「indexed」(預設值)時,LLPSF 在內部會使用 2 維的 Lucene「點」(BDK 樹)索引。當啟用「docValues」(預設值)時,經度和緯度對會以位元交錯成 64 位元,並放入 Lucene DocValues 中。docValues 資料的準確度約為一公分。
索引點
為了索引大地測量點(經度和緯度),請以「lat,lon」順序(逗號分隔)提供。
為了索引非大地測量點,這取決於情況。如果使用 RPT,請使用 x y
(一個空格)。但是,對於 PointType,請使用 x,y
(一個逗號)。
使用查詢解析器進行搜尋
Solr 有兩個用於地理空間搜尋的「查詢解析器」:geofilt
和 bbox
。它們接受以下參數
d
-
必填
預設值:無
徑向距離,通常以公里為單位。RPT & BBoxField 可以透過設定
distanceUnits
來設定其他單位。 pt
-
必填
預設值:無
中心點,如果使用緯度和經度,格式為
lat,lon
。否則,PointType 使用 "x,y",RPT 欄位類型使用 "x y"。 sfield
-
必填
預設值:無
一個已建立索引的空間欄位。
score
-
選填
預設值:
none
如果查詢用於評分環境中(例如,作為
q
中的主要查詢),此 local param 會決定產生的分數。進階選項;PointType 不支援。有效的值為
-
none
:固定的分數1.0
。 -
kilometers
:欄位值與指定的中心點之間的距離(以公里為單位)。 -
miles
:欄位值與指定的中心點之間的距離(以英里為單位)。 -
degrees
:欄位值與指定的中心點之間的距離(以度為單位)。 -
distance
:欄位值與指定的中心點之間的距離(以針對此欄位設定的distanceUnits
為單位)。 -
recipDistance
:1 / 距離。請勿將此用於索引的非點形狀(例如,多邊形)。結果將會錯誤。對於 RPT,僅建議用於多值點資料,因為實作的擴展性不太好,而對於單值欄位,您應該改用一個單獨的非 RPT 欄位來專門進行距離排序。
當與
BBoxField
一起使用時,支援其他選項 -
overlapRatio
:索引的形狀與查詢形狀之間的相對重疊比例。 -
area
:根據 haversine 計算的重疊形狀的面積,以針對此欄位設定的distanceUnits
表示。 -
area2D
:根據笛卡爾座標計算的重疊形狀的面積,以針對此欄位設定的distanceUnits
表示。
-
filter
-
選填
預設值:
true
如果您只希望查詢進行評分(使用上述
score
本機參數),而不是進行篩選,請將此本機參數設定為false
。進階選項;PointType 不支援。
geofilt
geofilt
篩選器允許您根據與給定點的地理空間距離(又稱「大圓距離」)來檢索結果。另一種看待它的方式是,它會建立一個圓形形狀篩選器。例如,若要尋找在給定緯度/經度點五公里內的所有文件,您可以輸入
&q=*:*&fq={!geofilt sfield=store}&pt=45.15,-93.85&d=5
此篩選器會傳回初始點周圍給定半徑的圓內的所有結果

bbox
bbox
篩選器與 geofilt
非常相似,只是它使用計算出的圓的邊界框。請參閱下圖中的藍色框。它接受與 geofilt 相同的參數。
以下是一個範例查詢
&q=*:*&fq={!bbox sfield=store}&pt=45.15,-93.85&d=5
矩形形狀的計算速度更快,因此有時會在允許傳回半徑以外的點時用作 geofilt
的替代方案。但是,如果理想的目標是圓形,但您希望它執行得更快,則請考慮改用 RPT 欄位,並嘗試較大的 distErrPct
值,例如 0.1
(半徑的 10%)。這將會傳回半徑以外的結果,但它會在形狀周圍以某種程度的均勻方式執行。

當邊界框包含一個極點時,邊界框最終會變成一個「邊界碗」(一個球面蓋),如果它接觸北極,則包含圓形最低緯度以北的所有值(如果它接觸南極,則包含最高緯度以南的所有值)。 |
依任意矩形篩選
有時,空間搜尋要求會需要尋找矩形區域中的所有內容,例如使用者正在檢視的地圖所涵蓋的區域。在這種情況下,geofilt 和 bbox 無法滿足需求。這有點像技巧,但您可以針對此使用 Solr 的範圍查詢語法,方法是將左下角作為範圍的開頭,右上角作為範圍的結尾。
以下是一個範例
&q=*:*&fq=store:[45,-94 TO 46,-93]
對於 RPT 和 BBoxField,如果您不使用緯度/經度座標 (geo="false"
),則必須引用這些點,因為它們之間有空格,例如 "x y"
。
最佳化:是否快取
最常見的做法是將空間查詢放入「fq」參數 - 一個篩選查詢。預設情況下,Solr 會將查詢快取在篩選器快取中。
如果您知道篩選查詢(無論是否為空間查詢)相當獨特,不太可能命中快取,請指定 cache="false"
作為本機參數,如以下範例所示。唯一可以從這項技術中獲益的空間類型是具有 docValues 的類型,例如 LatLonPointSpatialField 或 BBoxField。
&q=...mykeywords...&fq=...someotherfilters...&fq={!geofilt cache=false}&sfield=store&pt=45.15,-93.85&d=5
距離排序或增強(函數查詢)
有四個距離函數查詢
如需更多關於這些函數查詢的資訊,請參閱 函數查詢 的章節。
更多空間搜尋範例
以下是一些關於您可以在 Solr 中使用空間搜尋執行哪些操作的更多實用範例。
作為子查詢使用以擴展搜尋結果
在這裡,我們將查詢佛羅里達州傑克遜維爾的結果,或是在 45.15,-93.85(明尼蘇達州水牛城附近)50 公里內的結果
&q=*:*&fq=(state:"FL" AND city:"Jacksonville") OR {!geofilt}&sfield=store&pt=45.15,-93.85&d=50&sort=geodist()+asc
依距離分面
若要依距離分面,您可以使用 frange
查詢解析器
&q=*:*&sfield=store&pt=45.15,-93.85&facet.query={!frange l=0 u=5}geodist()&facet.query={!frange l=5.001 u=3000}geodist()
還有其他方法可以執行此操作,例如在每個 facet.query 中使用 {!geofilt}
。
增強最近的結果
使用 DisMax 查詢解析器 或 擴充 DisMax (eDisMax) 查詢解析器,您可以將空間搜尋與增強函數結合以增強最近的結果
&q.alt=*:*&fq={!geofilt}&sfield=store&pt=45.15,-93.85&d=50&bf=recip(geodist(),2,200,20)&sort=score desc
RPT
RPT 指的是 SpatialRecursivePrefixTreeFieldType
(又稱 RPT)和擴充版本:RptWithGeometrySpatialField
(又稱具有幾何圖形的 RPT)。RPT 提供了數個優於 LatLonPointSpatialField 的功能改進
-
非大地測量 - geo=false 一般 x & y(不是緯度和經度) — 如果需要
-
透過多邊形和其他複雜形狀進行查詢,除了圓形和矩形之外
-
能夠為非點形狀(例如,多邊形)以及點建立索引 – 請參閱 RptWithGeometrySpatialField
-
熱圖網格分面
RPT 與 LatLonPointSpatialField
共用各種功能。以下列出了一些
-
緯度/經度索引點資料;可能是多值的
-
透過
geofilt
、bbox
篩選器和範圍查詢語法進行快速篩選(支援日期變更線交叉) -
Well-Known-Text (WKT) 形狀語法(指定多邊形和其他複雜形狀時需要)和 GeoJSON。除了建立索引和搜尋之外,這也適用於
wt=geojson
(GeoJSON Solr 回應寫入器) 和[geo f=myfield]
(geo Solr 文件轉換器)。 -
透過
geodist
排序/增強 — 雖然不建議
儘管 RPT 支援距離排序/增強,但它在這方面的效率極低,未來可能會移除此功能。幸好,您可以同時使用 LatLonPointSpatialField 和 RPT。使用 LLPSF 進行距離排序/增強;它只需要為此提供 docValues;可以停用 index 屬性,因為不會使用它。 |
RPT 的結構描述設定
若要使用 RPT,必須在集合的結構描述中註冊和設定欄位類型。此欄位類型有很多選項。
name
-
必填
預設值:無
欄位類型的名稱。
class
-
必填
預設值:無
應該為
solr.SpatialRecursivePrefixTreeFieldType
。但請注意,Lucene 空間模組包含一些 RPT 以外的其他所謂的「空間策略」,特別是 TermQueryPT*、BBox、PointVector* 和 SerializedDV。Solr 需要對應的欄位類型才能使用這些策略。帶星號的那些有。 spatialContextFactory
-
選填
預設值:無
這是 Java 類別名稱,指向管理形狀定義和剖析支援的內部擴充點。針對已知的實作有兩個內建別名:
Geo3D
和JTS
。預設空白值不支援多邊形。 geo
-
選填
預設值:
true
如果
true
,將使用緯度和經度座標,且數學模型通常會是一個球體。如果false
,座標將會是 2D 平面上的通用 X 和 Y 座標,使用歐幾里得/笛卡爾幾何。 format
-
選填
預設值:
WKT
定義要使用的形狀語法/格式。預設為
WKT
,但GeoJSON
是另一種流行的格式。Spatial4j 管理此功能,並支援其他格式。如果給定的形狀可解析為「lat,lon」或「x y」,則始終支援該格式。 distanceUnits
-
選填
預設值:無
此設定用於指定此欄位中使用的距離測量的單位。可以是
degrees
、kilometers
或miles
。它適用於幾乎所有涉及該欄位的距離測量:maxDistErr
、distErr
、d
、geodist
以及當 score 為distance
、area
或area2d
時的score
。但是,它不會影響嵌入在 WKT 字串中的距離(例如,BUFFER(POINT(200 10),0.2)
),這些距離仍以度為單位。如果
geo
為true
,distanceUnits
預設為kilometers
;如果geo
為false
,則預設為degrees
。distanceUnits
取代了units
屬性;後者現在已棄用,並且與此屬性互斥。 distErrPct
-
選填
預設值:請參閱說明
定義非點形狀(索引和查詢)的預設精度,介於
0.0
(完全精確)到0.5
之間的分數。此數字越接近零,形狀就越精確。但是,更精確的索引形狀會使用更多磁碟空間,並且索引時間更長。較大的
distErrPct
值會使查詢更快,但精度較低。在查詢時,可以在查詢語法中覆蓋此值,例如設為0.0
,以避免近似搜尋形狀。RPT 欄位的預設值為0.025
。對於 RPTWithGeometrySpatialField(請參閱下文),序列化的幾何圖形始終具有完全的準確性,因此這並不是控制準確性,而是控制索引大小的權衡。該欄位的 distErrPct
預設值為0.15
。 maxDistErr
-
選填
預設值:請參閱說明
定義索引資料所需的最高細節層級。如果留空,預設值為一公尺,略小於 0.000009 度。此設定會在內部用於計算適當的 maxLevels(請參閱下文)。
worldBounds
-
選填
預設值:無
以
ENVELOPE(minX, maxX, maxY, minY)
的格式定義 x 和 y 的有效數值範圍。如果geo="true"
,則假設為標準的緯度-經度世界邊界。如果geo=false
,則應定義您的邊界。 distCalculator
-
選填
預設值:請參閱說明
定義距離計算演算法。如果
geo=true
,則預設為haversine
。如果geo=false
,則預設為cartesian
。其他可能的值為lawOfCosines
、vincentySphere
和cartesian^2
。 prefixTree
-
選填
預設值:請參閱說明
定義空間網格實作。由於 PrefixTree(例如 RecursivePrefixTree)將世界地圖映射為網格,因此每個網格單元會在下一級分解為另一組網格單元。
如果
geo=true
,則預設的前綴樹為geohash
,否則為quad
。Geohash 在每一級有 32 個子節點,quad 有 4 個。Geohash 只能用於geo=true
,因為它嚴格來說是地理空間的。第三種選擇是
packedQuad
,它通常比quad
更有效率,前提是有許多層級,可能超過 20 個。 maxLevels
-
選填
預設值:無
設定索引資料的最大網格深度。相反地,通常更直觀的做法是透過指定
maxDistErr
來計算適當的 maxLevels。
還有其他設定: normWrapLongitude
、datelineRule
、validationRule
、autoIndex
、allowMultiOverlap
、precisionModel
。如需更多資訊,請參閱下方有關上述參考的 spatialContextFactory
實作的說明,尤其是指向基於 JTS 的實作的連結。
標準形狀
RPT 欄位類型支援一組標準形狀:點、圓形(又稱緩衝點)、包絡(又稱矩形或邊界框)、線串、多邊形以及這些形狀的「多個」變體。包絡和線串是歐幾里得/笛卡爾(平面 2D)形狀。Solr 底層是實作這些形狀的 Spatial4j 程式庫。為了支援其他形狀,您可以在欄位類型上設定 spatialContextFactory
屬性,以參考其他選項。有兩個選項可用:JTS 和 Geo3D。
JTS 和多邊形 (平面)
JTS 拓樸套件是一個流行的計算幾何程式庫,具有歐幾里得/笛卡爾(平面 2D)模型。它支援各種形狀,包括多邊形、緩衝形狀和一些無效多邊形修復的回退。在 Spatial4j(隨附於 Solr)的協助下,多邊形支援日期變更線(反子午線)跨越。您必須下載它(一個 JAR 檔案)並將其放入 Solr 內部的一個特殊位置:SOLR_INSTALL/server/solr-webapp/webapp/WEB-INF/lib/
。您可以從此處輕鬆下載它:https://mvnrepository.com/artifact/org.locationtech.jts/jts-core/1.17.1。如果將其放置在其他更典型的 Solr lib 目錄中,則無法運作。
在欄位類型上將 spatialContextFactory
屬性設定為 JTS
。
啟用後,還有其他可用的設定屬性;請參閱 org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory 的 Javadocs,並記住也要查看超類別的選項。您最有可能啟用的一個選項是 autoIndex
(即使用 JTS 的 PreparedGeometry),因為它已被證明對於非平凡多邊形來說是一個主要的效能提升。
<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="JTS"
autoIndex="true"
validationRule="repairBuffer0"
distErrPct="0.025"
maxDistErr="0.001"
distanceUnits="kilometers" />
定義欄位類型後,定義使用該類型的欄位。
以下是欄位「geo」的多邊形查詢範例,該欄位可以是 solr.SpatialRecursivePrefixTreeFieldType 或 RptWithGeometrySpatialField
&q=*:*&fq={!field f=geo}Intersects(POLYGON((-10 30, -40 40, -10 -20, 40 20, 0 0, -10 30)))
搜尋述詞後面的括號內是形狀定義。該形狀的格式由欄位類型上的 format
屬性控制,預設為 WKT。如果您偏好 GeoJSON,則可以改為指定該格式。
除了本參考指南和 Spatila4j 的文件之外,Solr Wiki 上還有一些詳細資訊,網址為 https://cwiki.apache.org/confluence/display/solr/SolrAdaptersForLuceneSpatial4。
Geo3D 和多邊形(在橢球體上)
Geo3D 是 Lucene spatial-3d 模組的俗稱,包含在 Solr 中。它是一個計算幾何程式庫,在球體或 WGS84 橢球體上實作各種形狀(包括多邊形)。Geo3D 特別適合用於幾何圖形涵蓋全球大範圍距離或靠近兩極的空間應用程式。Geo3D 之所以如此命名,是因為其內部實作使用地心座標 (X,Y,Z),而不是用於不支援的 3 維幾何圖形。儘管有這些內部細節,您仍然可以像在 Solr 中一樣正常供應緯度和經度。
在欄位類型上將 spatialContextFactory
屬性設定為 Geo3D
。
<fieldType name="geom"
class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="Geo3D"
prefixTree="s2"
planetModel="WGS84"/><!-- or "sphere" -->
定義欄位類型後,定義使用該類型的欄位。
prefixTree="s2"
設定是選用的,而且只能與 Geo3D 一起使用。它是專為 Geo3D 而開發的,比其他網格更有效率。
使用 Geo3D 時,多邊形點的順序很重要!您必須遵循所謂的「右手定則」:外部環必須是逆時針順序,而內部孔必須是順時針順序。如果順序錯誤,則會反轉解釋,因此多邊形會被解釋為包含地球的大部分區域。 |
RptWithGeometrySpatialField
RptWithGeometrySpatialField
欄位類型是 SpatialRecursivePrefixTreeFieldType
的衍生類型,它也會將原始幾何圖形內部儲存在 Lucene DocValues 中,後者會用於實現精確搜尋。它也可以用於索引點欄位。Intersects 述詞(預設值)速度特別快,因為可以將許多搜尋結果作為精確的點擊傳回,而無需進行幾何檢查。此欄位類型的設定方式與 RPT 相同,只是預設的 distErrPct
為 0.15(高於 0.025),因為網格正方形僅用於效能,而不是從根本上表示形狀。
可以在 solrconfig.xml
中定義選用的記憶體快取,當資料往往具有許多頂點的形狀時,應執行此操作。假設您將欄位命名為「geom」,您可以透過新增以下內容在 solrconfig.xml
中設定選用的快取,請注意快取名稱的後綴
<cache name="perSegSpatialFieldCache_geom"
class="solr.CaffeineCache"
size="256"
initialSize="0"
autowarmCount="100%"
regenerator="solr.NoOpRegenerator"/>
使用此欄位類型時,您可能不希望將欄位標記為已儲存,因為它與 DocValues 資料重複,並且由於格式化(無論是 WKT 或 GeoJSON)而肯定更大。若要從 DocValues 擷取搜尋結果中的空間資料,請使用 [geo
轉換器]。
熱圖分面
RPT 欄位支援為每個網格單元中具有空間資料的文件產生 2D 分面計數網格。對於高細節網格,這可以用於繪製點,對於較低細節,則可以用於熱圖產生。網格單元會在索引時根據 RPT 的設定來判斷。在分面計數時,會遍歷感興趣區域中的索引單元,並遞增對應於每個單元的計數器網格。Solr 可以以直接的 2D 整數陣列形式傳回資料,或以 PNG 形式傳回資料,後者可以更好地壓縮較大的資料集,但必須進行解碼。
可以從 Solr 的標準分面功能和 JSON Facet API 存取熱圖功能。我們現在將繼續進行標準分面。作為分面的一部分,它支援 key
本機參數以及排除標記的篩選查詢,就像其他類型的分面一樣。這允許在具有不同篩選器的相同欄位上傳回多個熱圖。
facet
-
選填
預設值:
false
設定為
true
以啟用標準分面。 facet.heatmap
-
必填
預設值:無
RPT 類型的欄位名稱。
facet.heatmap.geom
-
選填
預設值:無
使用矩形範圍語法或 WKT 指定要計算熱圖的區域。預設值為世界。例如:
["-180 -90" TO "180 90"]
。 facet.heatmap.gridLevel
-
選填
預設值:請參閱說明
一個特定的網格層級,它會決定每個網格單元的大小。預設值是透過
distErrPct
(或distErr
)計算得出。 facet.heatmap.distErrPct
-
選填
預設值:
0.15
用於計算 gridLevel 的 geom 大小的一部分。它的計算方式與 RPT 的類似命名參數相同。
facet.heatmap.distErr
-
選填
預設值:無
用於間接選擇網格層級的單元格錯誤距離。它的計算方式與 RPT 的類似命名參數相同。
facet.heatmap.format
-
選填
預設值:
ints2D
格式,可以是
ints2D
或png
。
您將使用不同的 |
以下是一些 JSON 格式的範例輸出(為了簡潔起見,插入了「…」)
{gridLevel=6,columns=64,rows=64,minX=-180.0,maxX=180.0,minY=-90.0,maxY=90.0,
counts_ints2D=[[0, 0, 2, 1, ....],[1, 1, 3, 2, ...],...]}
輸出顯示了 gridLevel,這點很有趣,因為它通常是從其他參數計算得來的。如果正在開發的介面允許明確的解析度增加/減少功能,那麼後續的請求可以明確指定 gridLevel。
minX
、maxX
、minY
、maxY
報告計數所在的區域。這是目標網格級別上輸入 geom
的最小包圍邊界矩形。這可能會跨越日期變更線。columns
和 rows
值表示輸出矩形將被均勻劃分的列數和行數。注意:不要均勻劃分螢幕上投影的地圖矩形來繪製這些矩形/點,因為單元格數據的坐標空間是十進制度(如果 geo=true)或如果 geo=false 則給定的任何單位。這可以安排成與螢幕上的地圖相同,但並不一定如此。
counts_ints2D
鍵具有一個二維整數數組。初始外部層次是按行順序(由上而下),然後內部數組是列(由左而右)。如果任何數組都是全零,則為了效率起見,會返回 null 值。如果沒有匹配的空間數據,則整個值為 null。
如果 format=png
,則輸出鍵為 counts_png
。它是一個 4 位元 PNG 的 base-64 編碼字串。PNG 在邏輯上與 ints2D 格式包含完全相同的數據。請注意,alpha 通道位元已翻轉,以方便查看 PNG 進行診斷,因為否則計數必須超過 2^24 才會變得不透明。因此,大於此值的計數將變得不透明。
BBoxField
BBoxField
欄位類型為每個文檔欄位索引一個矩形(邊界框),並支援透過邊界框進行搜尋。它支援大多數空間搜尋謂詞,並且具有基於搜尋矩形和索引矩形之間的重疊或面積的增強相關性模式。它對於相關性模式特別有用。若要在架構中設定它,請使用如下組態:
<field name="bbox" type="bbox" />
<fieldType name="bbox" class="solr.BBoxField"
geo="true" distanceUnits="kilometers" numberType="pdouble" />
<fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
BBoxField 實際上是基於另一個由 numberType 引用的欄位類型的 4 個實例。它還使用一個布林值來標記日期變更線交叉。假設您要使用相關性功能,則需要 docValues(預設情況下啟用)。某些屬性與 RPT 欄位(如 geo、units、worldBounds 和 spatialContextFactory)相同,因為它們共享一些相同的空間基礎結構。
若要索引一個框,請將欄位值新增到一個 bbox 欄位,該欄位是 WKT/CQL ENVELOPE 語法中的字串。範例:ENVELOPE(-10, 20, 15, 10)
,其順序為 minX、maxX、maxY、minY。參數順序不直觀,但這是規範所要求的。或者,您可以使用 WKT(或如果設定 format="GeoJSON"
則使用 GeoJSON)提供一個矩形多邊形。
若要搜尋,您可以使用 {!bbox}
查詢剖析器或範圍語法,例如 [10,-10 TO 15,20]
,或使用括號包圍並帶有前導搜尋謂詞的 ENVELOPE 語法。後者是選擇 Intersects 以外的謂詞的唯一方法。例如
&q={!field f=bbox}Contains(ENVELOPE(-10, 20, 15, 10))
現在,若要依據其中一種相關性模式排序結果,請這樣使用:
&q={!field f=bbox score=overlapRatio}Intersects(ENVELOPE(-10, 20, 15, 10))
score
本機參數可以是 overlapRatio
、area
和 area2D
之一。area
使用球體表面(假設 geo=true
)數學來計算文件面積的分數,而 area2D
則使用簡單的寬度 * 高度。overlapRatio
計算一個 [0-1] 範圍的分數,該分數基於相對於文件面積和查詢面積存在的重疊量。BBoxOverlapRatioValueSource 的 javadocs 中提供了有關公式的更多資訊。還有一個額外的參數 queryTargetProportion
,允許您將公式的查詢端加權到公式的索引(目標)端。您也可以使用 &debug=results
來查看有用的分數計算資訊。