的目標是通過然後得分距離來執行multisort,並限制到我執行以下查詢的0.14度的半徑:Solr的4個空間查詢過濾器仍返回文件超出範圍
localhost:8983/solr/coll1/select?sortsq={! score=distance}locations:"Intersects(Circle(34.0031792,-118.3082034 d=0.14))"&fl=score,distdeg:query($sortsq),*&facet=true&sort=score desc,query($sortsq) asc&indent=on&wt=xml&version=2.2&rows=10&start=0&q=text:*&facet.field=xxxxx&fq=fieldname:"filterValue"
所有文件匹配查詢返回,不管它是否在圓內,但在0.14度內返回的距離(distdeg),其他的沒有返回該域。
如何省略不相交的文檔?
位置字段聲明:
<fieldType name="geo_field" class="solr.SpatialRecursivePrefixTreeFieldType"
spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
distErrPct="0.025"
maxDistErr="0.000009"
units="degrees"
/>
更新: 查詢
http://localhost:8983/solr/coll1/select?getDist={! score=distance}locations:"Intersects(Circle(34.0031792,-118.3082034 d=0.14))"&fl=score,distdeg:query($getDist),*&facet=true&sort=score desc&indent=on&wt=xml&version=2.2&rows=10&start=0&q=*:*&boost=query({! score=distdeg filter=false v=$getDist)&fq=locations:"Intersects(Circle(34.0031792,-118.3082034 d=0.14))",states:"CA"
非常感謝您的回答,提高距離更有意義,但我真的很想理解語法,是否有任何有關boost語法和計算距離函數的文檔。我使用工作查詢語法更新了問題,儘管如此,仍然沒有使用dismax。如果有任何改進,我可以讓請告訴我,非常感謝您的時間和努力 –
您更新的查詢正確使用'boost'參數,但是您沒有指定defType = edismax(edismax查找boost參數,沒有其他的)。我注意到一個尾隨「,在你的'fq'上寫着:」CA「,這是錯誤的,因爲逗號不應該在那裏,也許你的意思是'OR'?我在Solr的wiki上發佈了Solr 4空間頁面的鏈接。我應該添加一個描述提升的例子。您可能需要閱讀我的書或查看dismax/edismax上的其他信息(例如wiki)。 –
你是對的,我已經ommited了,替換爲AND並且啓用了dismax查詢解析器,但是在這裏出現了混淆,在文檔中寫道,qf參數定義了要返回的特定字段,與fl參數相同,但是有能力提高查詢時間,我試過使用qf參數,但它不適用於degdist:query($ getDist)。我不確定哪個使用fl或qf,或者同時使用fl和qf來提升某些字段?還有你指定的提升參數,它可以處理多個提升?我應該使用它還是使用qf來提升字段? –