2016-05-04 94 views
0

我正在使用solr作爲企業應用程序。到目前爲止,它運作良好,因爲我使用了一個ngram字段進行搜索。它適用於部分查詢(與索引的ngram匹配)。但我的問題是,如何執行精確的查詢匹配?例如,查詢「測試1」應該與用戶使用雙引號輸入完全相同的文本。目前由於我使用了一些標記器和過濾器,所以雙引號被過濾掉,查詢"test 1", "tEst 1" or "TEST 1"(這是因爲我使用的分析器鏈,但需要使用ngrams和部分搜索)。Solr搜索字段最佳實踐

當前我在搜索ngram查詢字段。爲了執行精確的查詢匹配,我該怎麼做?最佳做法是什麼?目前我認爲是從客戶端識別雙引號,並將查詢字段更改爲原始字段(使用out ngrams)。但我覺得應該有更好的方式來做到這一點,因爲我的問題是通用的,並且solr是一個完整的企業級搜索引擎。

回答

0

你可以有另一個field爲它,並添加string作爲fieldType爲相同和索引它相同。

當您想要執行完全匹配時,您可以查詢上述字段。

而當你想執行部分搜索..你可以查詢到由ngram索引的早期領域。

OR ..這是另一種可以嘗試的方法。

您已經使用ngram定義了當前字段類型。在編制索引時,您可以定義ngram標記器,並且僅針對提及keywordTokenizer和小寫過濾器工廠的查詢。

索引文本時將被標記化,而執行查詢時則不會。

+0

所以你的意思是,我應該從客戶端識別雙引號並根據那個改變查詢字段。我想過這個,但這不是一個solr可能已經解決它的通用問題嗎?我想我可能會重新發明輪子 – wattale

+0

@wattale:請檢查答案我已經添加了一個選項... –

+0

但問題是,當用戶故意用雙引號輸入查詢時,我該如何處理?在你的方法中,我們必須使用一種機制來標準化索引並查詢兩者,那麼雙引號就沒有意義。它也應該匹配區分大小寫的字段。我在edismax解析器中找到了pf字段..我正在看它:) – wattale