2016-08-12 61 views
0

我的用例: 我有一個名爲cqpath的單值字段。這是一個文本框,並具有價值,看起來像下面這樣:如何查詢子字符串的solr字段

  1. 「/內容/域/ EN /路徑/到/一些/頁」
  2. 「/內容/域/ EN /路/到/其它/頁」
  3. 「/內容/域/ EN-US /路徑/到/一些/頁」
  4. 「/內容/域/ EN-US /路徑/到/其它/頁」

我想形成一個查詢,將返回我1.和2.我一直在努力沿着寫作的路線:

cqpath:「/ content/domain/en」

已被發現是錯誤的,因爲它也檢索項目3和4。你們有沒有想過一種方法來編寫一個只返回1和2而不是3和4的查詢?

這是一個普通的textfield字段類型。真的很感激你的幫助。

+0

你在使用[StandardTokenizer](https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-StandardTokenizer)嗎?你能把你的'schema.xml'發佈到什麼地方嗎? – rivu

+0

您可以將它複製到常規的StrField並使用'field:/ content/domain/en/*'查詢嗎? – MatsLindh

回答

0

從Solr 4.0開始,您可以使用正則表達式查詢。你可以找到一些有用的例子here。 在你的情況,你可以得到你正在尋找使用類似的結果:

cqpath:/.*content/domain/en.*/ 
+0

我剛剛嘗試過,它似乎不工作。出於某種原因,標準標記器似乎丟掉了作爲問題根源的破折號( - )和斜線(/)。感謝您花時間回答反正...我的目標是亂搞tokenizer .. –

0

它看起來像你正試圖與路徑元素(斜槓)邊界位置匹配部分路徑。通常的通用解決方案是在索引期間標記化以生成所有替代完成,並且在查詢期間標記化爲而不是。所以,字段類型聲明是不對稱的。 Solr發行版中有這樣的例子。你會看看使用像(僅索引時間)EdgeNGramFilterFactory,而不是更昂貴的正則表達式匹配。

對於您的具體情況,您可能需要查看測試PathHierarchyTokenizer,它會自動爲您執行此操作。

如果您的內容更像完整的網址而不僅僅是路徑,您還可以通過包含URLClassify URP的自定義更新請求處理器鏈感興趣。這不是很有文件記載,但提到generating url parts,這是我認爲你會想要的。

+0

PathHierarchyTokenizer是答案...謝謝陌生人(reddit gold):) –