7

検索したい URL のデータベースがあります。URL は常に同じように記述されるとは限らない (www が含まれる場合と含まれない場合がある) ため、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

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

myfield:("twitter com andersoncooper") 次の個別の単語をすべて含むすべてのレコードと一致させたい場合: twitter com andersoncooper

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

4

3 に答える 3

1

あなたの質問からこの声明を理解できれば

myfield:("twitter com andersoncooper") 次の個別の単語をすべて含むすべてのレコードと一致させたい場合: twitter com andersoncooper

両方に一致するクエリを作成しようとしています:

http://www.twitter.com/AndersonCooper

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

(両方のリンクにすべてのトークンが含まれています)、どちらにも一致しません

http://www.facebook.com/AndersonCooper 

また

http://www.twitter.com/AliceCooper

それが正しければ、既存の構成は問題なく機能するはずです。標準のクエリ パーサーを使用していて、curl またはその他の URL ベースのメカニズムを介してクエリを実行していると仮定すると、次のようなクエリ パラメータが必要です。

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

つまずいたかもしれない落とし穴の 1 つは、既定のクエリ演算子 (クエリ内の用語間の) が "OR" であることです。これが、上記で AND を明示的に指定する必要がある理由です。または、スペースを節約するために、次のようにデフォルトのクエリ演算子を「AND」に変更できます。

&q.op=AND&q=myField:(andersoncooper twitter com)
于 2016-10-21T00:03:02.607 に答える
0

これは最も簡単な解決策です。

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

ただし、必要に応じて、複数値にしてインデックスを作成する必要があります 1.変更なし 2.httpなし 3.wwwなし

または、先頭のワイルドカードを使用して URL を検索可能にします (これは遅いと思います)。

于 2011-01-16T22:53:35.227 に答える
-1

キーワードトークナイザーを試すことができます

Packt 発行 の書籍Solr 1.4 Enterprise Search Serverから

KeywordTokenizerFactory: これは、実際にはトークン化などは一切行いません。元のテキストを 1 つの用語として返します。常に 1 つの単語を取得するフィールドがある場合がありますが、小文字化などの基本的な分析を行う必要があります。ただし、並べ替えやファセットの要件により、用語が 1 つしかないインデックス付きフィールドが必要になる可能性が高くなります。数値ではなく、ドキュメントの識別子フィールドが指定されている場合は、これを使用します。

于 2011-01-14T14:07:45.950 に答える