2011-01-13 81 views
7

我有一個我想要搜索的URL數據庫。由於網址並不總是相同(可能有或沒有www),我正在尋找正確的方法來索引和查詢網址。 我已經嘗試了一些東西,我覺得我很接近,但不知道爲什麼它不工作:索引和查詢Solr中的URL

這裏是我的自定義字段類型:

<fieldType name="customUrlType" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

例如:

http://www.twitter.com/AndersonCooper索引時,會在不同的位置下面的話:HTTP,WWW,嘰嘰喳喳,玉米,安德森·庫珀

如果我要尋找的只是twitter.com/andersoncooper,我想這個查詢匹配的是索引記錄, 這就是爲什麼我也使用WDF來分割搜索查詢 但是搜索查詢最終如下所示:

myfield :(「twitter com andersoncooper」)當真的希望它匹配具有以下所有內容的所有記錄時字:twitter com andersoncooper

是否有一個不同的查詢過濾器或標記器我應該使用?

+1

您是否曾經最終將這個問題整理出來? – Cyrus 2011-09-13 06:59:54

+1

你認爲我們需要在這裏做什麼? – 2014-03-28 16:10:10

回答

-1

你可以嘗試keyword tokenizer

從書Solr的1.4企業搜索服務器通過年底Packt出版

KeywordTokenizerFactory:這不 實際上做任何標記化或 任何東西爲物!它 將原始文本作爲一個術語返回。 有些情況下,您有一個 字段總是會得到一個字,但是 您需要進行一些基本分析 ,比如小寫字母。但是,更多的 可能由於排序或面向需求,您將需要 一個索引字段,其索引字段不超過 。當然,一個文檔的 標識符字段(如果提供的話,而不是 的一個數字)將使用這個。

+0

這不適用於OP – Gus 2016-10-20 23:36:59

0

這應該是最簡單的解決方案:

<field name="iconUrl" type="string" indexed="true" stored="true" /> 

但是對於你的要求,你需要使它多值和索引它1.沒有變化2.不含http 3。加www

或使URL通過通配符搜索在前面(這是比較慢我猜)

0

如果我沒有理解這個說法從你的問題

MyField的:(「嘰嘰喳喳COM安德森·庫珀」)當真的希望它匹配具有以下所有單獨的單詞的所有記錄:Twitter的COM安德森·庫珀

你試圖寫一個查詢,將匹配兩種:

http://www.twitter.com/AndersonCooper 

http://www.andersoncooper.com/socialmedia/twitter 

(這兩個鏈接包含所有令牌),但不能匹配任何

http://www.facebook.com/AndersonCooper 

http://www.twitter.com/AliceCooper 

如果這是正確的,你現有的配置應該工作k很好。假設你使用的是標準的查詢分析器和你通過捲曲或其它一些基於URL的機構查詢,你需要的查詢參數如下所示:

&q=myField:andersoncooper AND myField:twitter AND myField:com 

其中一個陷阱的可能已被絆倒你了缺省查詢操作符(在查詢中的術語之間)是「OR」,這就是爲什麼AND必須在上面明確指定的原因。或者爲了節省一些空間,您可以像下面這樣將默認查詢運算符更改爲「AND」:

&q.op=AND&q=myField:(andersoncooper twitter com)