2014-07-13 77 views
0

我正在使用solr 4.9.0實現solr搜索。Solr查詢只匹配如果查詢中存在所有標記

我想solr返回匹配所有我的查詢關鍵字不只是一個或幾個結果。

讓我放棄一個例子

<field name="id" type="string" indexed="true" stored="true" required="true"/> 
<field name="title" type="text_general" indexed="true" stored="true" required="true"/> 
<field name="at" type="string" indexed="true" stored="true" required="true"/> 
<field name="rt" type="custom1" indexed="true" stored="true" required="true"/> 
<field name="st" type="custom1" indexed="true" stored="true" required="true"/> 

我對所有的這一個copyField(如果萬一事宜)

<copyField source="id" dest="text"/> 
<copyField source="title" dest="text"/> 
<copyField source="at" dest="text"/> 
<copyField source="rt" dest="text"/> 
<copyField source="st" dest="text"/> 

和「CUSTOM1」 filedType前豎起模式,我已經定義如下:

<fieldType name="custom1" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

fieldType可能沒有什麼意義,因爲我試圖很多,如果梳以獲得我想要的結果。

領域可以有以下值:

標題 - 可以包含在任何 - 客房女孩,公寓爲單打,聯合援助宿舍 RT - 1個共享,3共享,單座 日 - 1 BHK,3 BHK

現在,如果我查詢「1 BHK flat in roselum city」,我期望結果只用st作爲「1 BHK」和其他包含標題中關鍵字的結果。

但是我也得到了rt =「1 sharing」的結果,並且結果有st =「3 BHK」,因爲我的查詢包含1和BHK,並且它匹配包含任何這些數據的所有數據。無論是「1」或「BHK」或查詢中的任何其他關鍵字,這是我不想要的。

我搜索了相關的問題,並發現一些有希望的答案,但沒有工作:

這裏就是我已經嘗試過:
1. Performing EXACT match on SOLR search 這個答案完全符合我的問題,但我不能這樣做即使在每一步之後。
2.我已將<solrQueryParser defaultOperator="AND"/> 添加到我的schema.xml以強制查詢遵循AND規則,但它也不起作用。
3.將「<str name="mm">100%</str>」添加到我的solrConfig.xml中的「/ query」requestHandler中以匹配100%的關鍵字,但這也使我無望。

我想要的幾乎與fredseagul(第一點)在他的問題中引用的內容相同。

任何專家誰可以詳細說明整個事情,請介入。

注意:我只想通過修改架構/任何其他配置,不想進行復雜的查詢。只有結果具有的所有關鍵字strt字段應返回。 標題字段是一個例外,如果查詢中的任何一個關鍵字與標題關鍵字匹配,那麼應返回該結果。


請不要標記爲重複。我爲此搜尋了很多。

回答

0

你有一大堆的問題在這裏:

  1. 你CUSTOM1字段定義完全打破。目前,如果您在具有custom1定義的文本中使用大寫字母,它將永遠不會匹配,因爲只有小寫字母纔會匹配。您應該使用Admin WebUI中的分析選項卡來查看定義的功能。
  2. 但這可能並不重要,因爲您正在做copyField,並且可能在'text'字段上搜索爲默認值。這意味着只有類型爲的文字的問題。

我建議退後一步,先做一些練習/輔導。很可能你想使用eDismax和字段列表,mm = 100%。並沒有copyText。