2012-01-20 8 views
1

SOLRは、すべてのドキュメントにわたって用語の用語オカレンスをレポートします。私は、特定のページフィールド、documentPageIdに用語オカレンスを返すクエリを作成することに問題があります。ページフィールドからワードカウントの頻度を取得する

フィールドの用語「アンプ」のようなテキスト段落の語数を返す適切なSOLRクエリを発行する方法がわかりません。なんらかの理由でそれが返ってくるだけです。

私が試したことは、段落内の用語が単なる一回だけではなくても、用語の1回の出現に対してカウントを返します。

私は、 "内容"

http://localhost:8983/solr/select?indent=on&q=フィールド上のファセッティングしようとしました: &重量=標準&面=の& facet.field = documentPageId & facet.query =アンプ& facet.sort = LEX & facet.missing = & facet.method上=のschema.xmlで

<lst name="facet_counts"> 
<lst name="facet_queries"> 
<int name="amplifier">21</int> 
</lst> 
<lst name="facet_fields"> 
<lst name="documentPageId"> 
<int name="49667.1">1</int> 
<int name="49667.10">1</int> 
<int name="49667.11">1</int> 
<int name="49667.12">1</int> 
<int name="49667.13">1</int> 
<int name="49667.14">1</int> 
<int name="49667.15">1</int> 
<int>0</int> 
</lst> 
</lst> 
<lst name="facet_dates"/> 
<lst name="facet_ranges"/> 
</lst> 
</response> 

を数える: solrconfig.xmlで

:あなたが与える文書の用語頻度を取得するためにTermVectorsComponentを使用する必要があり、事前に

<str name="facet.field">filewrapper</str> 
    <str name="facet.field">caseNumber</str> 
    <str name="facet.field">pageNumber</str> 
    <str name="facet.field">documentId</str> 
    <str name="facet.field">contents</str> 
    <str name="facet.query">documentId</str> 
    <str name="facet.query">caseNumber</str> 
    <str name="facet.query">pageNumber</str> 
    <str name="facet.field">documentPageId</str> 
    <str name="facet.query">contents</str> 

おかげで、

答えて

2

。ファセットはあなたをそこに連れてこないでしょう。

TermVectorCompomentでwikiを読んでください。

オプションtv.tfは、ドキュメントごとに特定のフィールドの用語頻度を返します。関心のあるフィールドにtermVectorsが有効になっていることを確認してください(termVectors="true")。

<field name="pageField" type="text" indexed="true" stored="true" termVectors="true" /> 

注:用語ベクトルを有効にすると、インデックスサイズ&にインデックスに必要な時間が長くなります。だからこれに注意してから&の前にベンチマークをしてください。

+0

素晴らしい!これはうまくいった。しかし、クエリを高速化するには、どのようにドキュメントページ内の特定の用語に限定することができますか。それはすべての用語と頻度カウントを返しています。 –

+0

私は '文書ページ'によってあなたがSolrのフィールドを意味すると思います。今すぐSolr ** TermVectorComponent **の実装をチェックするとLucene 'IndexReader.getTermFreqVector'が内部的に使用されます。TermVector情報をフィールド内の用語セットに対してのみ取得する意味のある方法はありません。しかし、索引時間中にほとんどの用語ベクトルを計算するコストが発生するので、検索する方が速くなければならない。制限する方法の1つは、特定の 'field'、' document'、おそらく 'tf'だけである。アプリケーションの設計と使用方法によって異なります。 – mailboat

+0

2つのクエリを実行する必要があるようです。各ページで用語頻度を取得するための最初のクエリと、オフセットを取得するための2番目のクエリです。あなたは両方を行うことができるように見えません。 –

関連する問題