[英]How are Solr fields mapped in Spring Data Solr?
我正在嘗試使用Spring Data Solr從后端Solr服務器查詢內容,該服務器具有以下schema.xml
(為了簡單起見,僅顯示字段),這是從Nutch schema.xml
復制的。 這意味着我使用Nutch爬網,然后將段傳遞給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>
...
現在,查看Spring Data 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存儲庫,它們通常包含諸如作為“名稱”,“受歡迎程度”,“作者”,我不確定這些字段實際上代表或映射到了什么。
您需要使用@Field批注定義一個鏡像SOLR文檔的Java對象。
看一下教程,如https://www.petrikainulainen.net/programming/solr/spring-data-solr-tutorial-crud-almost/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.