2011-01-13 17 views
7

私は検索したいURLのデータベースを持っています。 URLは常に同じ(wwwがある場合とない場合があります)と書かれているわけではないので、私はURLを索引付けして照会する正しい方法を探しています。私はいくつかのことを試してみた、と私はそれが動作しない理由を私は近いがわからないと思う :たとえば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、さえずり、COM、アンダーソン・クーパー

私は単にtwitter.com/andersoncooperを検索する場合、私はインデックスされたレコードを一致させるために、このクエリをしたいと思いますが、 というわけで私もWDFを使って検索クエリ を検索しますが、検索クエリは次のようになります。

myfield :("twitter com andersoncooper")次のすべての言葉:twitter com andersoncooper

私は使用するはずの別のクエリフィルタまたはトークナイザはありますか?

+1

これを並べ替えることはできませんでしたか? – Cyrus

+1

ここで何をする必要があるのか​​わかりましたか? –

答えて

-1

あなたは本Solrの1.4エンタープライズ検索サーバー置くPackt

によって公開され

KeywordTokenizerFactoryからkeyword tokenizer

を試すことができます。これは実際には任意のトークン化か、そのためにすべての 何もしませ ん問題! は元のテキストを1つの単語として返します。 フィールドには常に1語が入力されますが、 の場合、lowercasingのような基本的な分析を行う必要があります。 しかし、 の可能性があります。つまり、 ファセット要件のために、 インデックスフィールドには1つの用語が 以上必要です。確かにドキュメントの 識別子フィールドが提供されていて、 の番号ではない場合は、これが使用されます。

+0

これはOP – Gus

0

これが最も簡単な解決策のようになります。

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

でもあなたはそれを多値にする必要があります要件とインデックスのためにそれは1なしには、http 3なし2.を変更します。WWW

または(遅く私は推測している)前面にワイルドカードを経由してURLを検索可能にせずに

+0

で説明されているクエリではうまくいかないでしょう。 'StrField'からの' string'は解析されませんが、保存/索引付けすることができます。 –

+0

URLの一部のみを指定するOPのクエリでは機能しません – Gus

0

私はあなたの質問からこの文を理解していれば

myFieldで:(「さえずり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) 
関連する問題