Solr の周りで少し遊んでみたところ、Tomcat サーブレット コンテナー内で実行することができました。Spring Data のリポジトリ アプローチを使用したいのですが、緯度/経度フィールド (つまり、地理空間データ) を処理しようとすると行き詰まりました。ツイートのようなデータを保存したいと思います。これは私が現在使用しているスキーマです(wikiをフォローしようとしています):
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="tweets" version="1.1">
<types>
<fieldType name="string" class="solr.StrField"/>
<fieldType name="text1" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.HunspellStemFilterFactory"
dictionary="../../dictionaries/es_ANY.dic"
affix="../../dictionaries/es_ANY.aff"
ignoreCase="true" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text2" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
<dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
<fieldType name="date" class="solr.DateField"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
</types>
<fields>
<field name="id" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="username" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="pictureURL" type="string" indexed="false" stored="true" multiValued="false"/>
<field name="topic" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="content" type="text1" indexed="true" stored="true"/>
<field name="hashtags" type="text2" indexed="true" stored="true"/>
<field name="geo" type="location" indexed="true" stored="true"/>
<field name="timestamp" type="date" indexed="true" stored="true"/>
<field name="_version_" type="long" indexed="true" stored="true"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>id</defaultSearchField>
</schema>
これは、POJO でマッピングする方法がわからない geo フィールドがなくても正常に機能します (geo フィールドで MongoDB のような double[] と String の両方を使用してみましたが、あまり成功しませんでした):
public class Tweet {
@Id
@Field
private String id;
@Field
private String username;
@Field
private String pictureURL;
@Field
private String topic;
@Field
private String content;
@Field
private List<String> hashtags;
@Field
private String geo;
@Field
private Date timestamp;
/** Getters/setters omitted **/
}
geo フィールドを単純な文字列 ([lat]、[lng]) としてマッピングすると、次の例外がスローされます。
org.springframework.data.solr.UncategorizedSolrException: undefined field: "geo_0_coordinate"; nested exception is org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: undefined field: "geo_0_coordinate"
プロジェクトのテストを見てみましたが、geo フィールドを使用する POJO は見つかりませんでした。
続行する方法について何か考えはありますか?
ありがとう!