2016-10-04 12 views
1

私はsolrにデータを格納するアプリケーションを使用します。残念ながら、これは単一値のみをsolrに書き込むことができます。しかし、データの中には複数の日付値があります。だから私はそれらを検索するために、多値の日付フィールドでそれらを必要とします。Solr分割日を複数値フィールドに連結

私はすでにいくつかの文字列の値を使用してこの問題を抱えていたが、(それが1つの文字列として転送することができるように)分離して値を接合した後、solr.PatternTokenizerFactoryを使用して、それを解決しました。

は、このように私は、多値日付フィールドと同じことをしようとしたが、Solrにはこれを拒否した:

FieldType: TrieDateField does not support specifying an analyzer 

はどんなオプションがSolrの側でこれを解決するために左にありますか?

tldr:多値日付事前に

2015-07-29T16:50:00Z$2016-04-08T18:15:00Z 

感謝のうち

2015-07-29T16:50:00Z 
2016-04-08T18:15:00Z 

を取得する方法はあります!

[編集]

sanjayduttindiaは正しかったです。それは素晴らしい作品です! 最後に私は..反復において更新要求中のスクリプトとして実装 更新プロセッサの使用を可能

function processAdd(cmd) { 
    doc = cmd.solrDoc; 
    id = doc.getFieldValue("id"); 
    multiDate = doc.getFieldValue("sendebeginn_raw"); 
    dates = multiDate.split("$"); 
    dates.forEach(function (item) { 
     doc.addField("sendebeginn", item); 
    }); 
    logger.info("UpdateScript processed: "+id); 
} 

答えて

2

StatelessScriptUpdateProcessorFactoryを配列値を設定しなければなりませんでした。
Solrがドキュメントを更新すると、StatelessScriptUpdateProcessorFactoryに複数の日付が来るフィールド値が取得されます。私たちは価値を分け、新しい分野に入れました。
multiDateは、複数の日付が来るされている文字列フィールドで、日付は、フィールドタイプとしてtdateを持つ複数値フィールドであるとしましょう。以下

<field name="multiDate" type="strings"/> 
<field name="date" type="tdate" multiValued="true" indexed="true" stored="true"/> 

更新script.jsサンプルです。

function processAdd(cmd) { 
    doc = cmd.solrDoc; 
    multiDate = doc.getFieldValue("multiDate").toString(); 
    dates = multiDate.split("\\$"); 
    doc.setField("date",dates); 

} 
function processDelete(cmd) { 
    // no-op 
} 

function processMergeIndexes(cmd) { 
    // no-op 
} 

function processCommit(cmd) { 
    // no-op 
} 

function processRollback(cmd) { 
    // no-op 
} 

function finish() { 
    // no-op 
} 

solrconfig.xmlでをupdateRequestProcessorChain にStatelessScriptUpdateProcessorFactoryプロセッサを追加します。

<processor class="solr.StatelessScriptUpdateProcessorFactory"> 
    <str name="script">updateProcessor.js</str> 
</processor> 

リットル

+0

は非常に有望ですね!私はそれを試してみましょう。ありがとう! – anse

+0

それは動作します!ありがとうございました!私の質問を編集して、実例を示しました。 – anse

関連する問題