2016-11-26 134 views
1

我試圖使用Spring Data Solr查詢來自後端Solr服務器的東西,它具有以下schema.xml(顯示您只是字段爲簡單起見),它是從Nutch schema.xml複製的。這意味着,我已經爬到使用Nutch的網頁,然後通過細分到Solr:Solr字段在Spring Data Solr中如何映射?

... 

<fields> 

    <!--APPARENTLY THE ONLY FIELD WHICH IS REQUIRED!!! --> 
    <field name="id" type="string" stored="true" indexed="true" required="true"/> 

    <field name="_version_" type="long" indexed="true" stored="true"/> 

    <!-- core fields --> 
    <field name="segment" type="string" stored="true" indexed="false"/> 
    <field name="digest" type="string" stored="true" indexed="false"/> 
    <field name="boost" type="float" stored="true" indexed="false"/> 

    <!-- fields for index-basic plugin --> 
    <field name="host" type="url" stored="false" indexed="true"/> 
    <field name="url" type="url" stored="true" indexed="true"/> 
    <!-- stored=true for highlighting, use term vectors and positions for fast highlighting --> 
    <field name="content" type="text_general" stored="true" indexed="true"/> 
    <field name="title" type="text_general" stored="true" indexed="true"/> 
    <field name="cache" type="string" stored="true" indexed="false"/> 
    <field name="tstamp" type="date" stored="true" indexed="false"/> 

    <!-- fields for index-geoip plugin --> 
    <field name="ip" type="string" stored="true" indexed="true"/> 
    <field name="cityName" type="string" stored="true" indexed="true"/> 
    <field name="cityConfidence" type="int" stored="true" indexed="true"/> 
    <field name="cityGeoNameId" type="int" stored="true" indexed="true"/> 
    <field name="continentCode" type="string" stored="true" indexed="true"/> 
    <field name="continentGeoNameId" type="int" stored="true" indexed="true"/> 
    <field name="contentName" type="string" stored="true" indexed="true"/> 
    <field name="countryIsoCode" type="string" stored="true" indexed="true"/> 
    <field name="countryName" type="string" stored="true" indexed="true"/> 
    <field name="countryConfidence" type="int" stored="true" indexed="true"/> 
    <field name="countryGeoNameId" type="int" stored="true" indexed="true"/> 
    <field name="latLon" type="string" stored="true" indexed="true"/> 
    <field name="accRadius" type="int" stored="true" indexed="true"/> 
    <field name="timeZone" type="string" stored="true" indexed="true"/> 
    <field name="metroCode" type="int" stored="true" indexed="true"/> 
    <field name="postalCode" type="string" stored="true" indexed="true"/> 
    <field name="postalConfidence" type="int" stored="true" indexed="true"/> 
    <field name="countryType" type="string" stored="true" indexed="true"/> 
    <field name="subDivName" type="string" stored="true" indexed="true"/> 
    <field name="subDivIsoCode" type="string" stored="true" indexed="true"/> 
    <field name="subDivConfidence" type="int" stored="true" indexed="true"/> 
    <field name="subDivGeoNameId" type="int" stored="true" indexed="true"/> 
    <field name="autonSystemNum" type="int" stored="true" indexed="true"/> 
    <field name="autonSystemOrg" type="string" stored="true" indexed="true"/> 
    <field name="domain" type="string" stored="true" indexed="true"/> 
    <field name="isp" type="string" stored="true" indexed="true"/> 
    <field name="org" type="string" stored="true" indexed="true"/> 
    <field name="userType" type="string" stored="true" indexed="true"/> 
    <field name="isAnonProxy" type="boolean" stored="true" indexed="true"/> 
    <field name="isSatelitteProv" type="boolean" stored="true" indexed="true"/> 
    <field name="connType" type="string" stored="true" indexed="true"/> 
    <field name="location" type="location" stored="true" indexed="true"/> 

    <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> 

    <!-- catch-all field --> 
    <field name="text" type="text_general" stored="false" indexed="true" multiValued="true"/> 

    <!-- fields for index-anchor plugin --> 
    <field name="anchor" type="text_general" stored="true" indexed="true" multiValued="true"/> 

    <!-- fields for index-more plugin --> 
    <field name="type" type="string" stored="true" indexed="true" multiValued="true"/> 
    <field name="contentLength" type="string" stored="true" indexed="false"/> 
    <field name="lastModified" type="date" stored="true" indexed="false"/> 
    <field name="date" type="tdate" stored="true" indexed="true"/> 

    <!-- fields for languageidentifier plugin --> 
    <field name="lang" type="string" stored="true" indexed="true"/> 

    <!-- fields for subcollection plugin --> 
    <field name="subcollection" type="string" stored="true" indexed="true" multiValued="true"/> 

    <!-- fields for feed plugin (tag is also used by microformats-reltag)--> 
    <field name="author" type="string" stored="true" indexed="true"/> 
    <field name="tag" type="string" stored="true" indexed="true" multiValued="true"/> 
    <field name="feed" type="string" stored="true" indexed="true"/> 
    <field name="publishedDate" type="date" stored="true" indexed="true"/> 
    <field name="updatedDate" type="date" stored="true" indexed="true"/> 

    <!-- fields for creativecommons plugin --> 
    <field name="cc" type="string" stored="true" indexed="true" multiValued="true"/> 

    <!-- fields for tld plugin --> 
    <field name="tld" type="string" stored="false" indexed="false"/> 

    <!-- field containing segment's raw binary content if indexed with -addBinaryContent --> 
    <field name="binaryContent" type="binary" stored="true" indexed="false"/> 

</fields> 

... 

現在,看着春數據Solr的文檔,例如這裏:

http://docs.spring.io/spring-data/solr/docs/1.4.x/reference/html/#reference

他們使用的方法和字段似乎與我的模式中的字段不匹配。例如,在文檔它們有:

public interface ProductRepository extends Repository<Product, String> { 
    List<Product> findByNameAndPopularity(String name, Integer popularity); 
} 

public interface ProductRepository extends SolrRepository<Product, String> { 
    @Query("inStock:?0") 
    List<Product> findByAvailable(Boolean available); 
} 

而且在看我的領域我沒有任何所謂的「名」,「人氣」或「可用」的字段。我錯過了什麼?我應該改變我的模式嗎?我應該從文檔更改存儲庫嗎?

這最後一個問題看起來很愚蠢,但由於我見過的使用Spring Data Solr的示例僅創建Product模型(我知道它是一個示例,但示例通常反映了默認情況!)以及它們相應的Solr存儲庫,通常包含諸如「名稱」,「流行度」,「作者」等字段,我不確定這些字段實際代表或映射到的是什麼。

回答