2016-09-14 40 views
0

在我們的場景中,我們收到未知地址格式的字符串格式的未知郵政地址。我們的需求是使用給定的郵政地址在所有字段上運行搜索,併爲查詢找到最佳匹配。但是,如果我們沒有4個必填字段的完全匹配 - 意味着SOLR返回類似的結果(對於至少1個必填字段),則應顯示NO結果。如何僅在Solr中存在四個必填字段時返回結果

4個必填字段BuildingNumber,LocPressName,縣和PostalDistrict與在Schema.xml文件的其他搜索領域的定義如下 -

<field name="uid" stored="true" indexed="true" type="uuid" default="NEW"/> 
<field name="UnitNumber" stored="true" indexed="true" type="text_general"/> 
<field name="UnitName" stored="true" indexed="true" type="text_general"/> 
<field name="BuildingNumber" stored="true" indexed="true" type="exactish"/> 
<field name="BuildingName" stored="true" indexed="true" type="text_general"/> 
<field name="LocPressName" stored="true" indexed="true" type="exactish"/> 
<field name="PostalDistrict" stored="true" indexed="true" type="exactish"/> 
<field name="County" stored="true" indexed="true" type="exactish"/> 
<field name="AddressId" stored="true" indexed="true" type="text_general"/> 
<field name="ExchangeCode" stored="true" indexed="true" type="text_general"/> 
<field name="PreviousCustomerName" stored="true" indexed="true" type="text_general"/> 
<field name="Eircode" stored="true" indexed="true" type="text_general"/> 

我是相當新的Solr的,我不知道如何生成此查詢,只有找到匹配所有FOUR必填字段時纔會產生最佳結果。

回答

0

沒有您的exactish字段的確切類型,很難說,但假設它是一個StrField。基本的,明確的版本:

q=(BuildingNumber:18 AND LocPressName:Foo AND 
County:Forthershire AND PostalDistrict:Bar) AND searchField:Query 

..其中searchField是你要搜索的text_general場已被複制的一切領域。如果需要,您可以將其替換爲所有其他字段。

另一種選擇:

q=Query&defType=edismax&qf=UnitNumber UnitName .. etc&fq=BuildingNumber:18 AND 
LocPressName:Foo AND County:Forthershire AND PostalDistrict:Bar 

這工作相同,但允許自由形式的查詢使用edismax查詢分析器。 fq將過濾器應用於結果集,其中文檔具有以匹配結果集中要考慮的過濾器。但是它並不影響文檔的評分方式。

+0

謝謝您的建議,但它似乎拆分給定的地址,這是不可能的。問題是我們收到的地址是未知格式的未知字符串。 –

+0

那麼如何讓你的模式中的特定領域得到任何東西? – MatsLindh

+0

我們正在從文檔中獲得最佳匹配,而對強制字段沒有任何重要性。意思是,必填字段包含的值與給定字符串(未知格式)中的數據無關 - 我將發佈一個示例... –

相關問題