【问题标题】:How are Solr fields mapped in Spring Data Solr?Spring Data Solr 中的 Solr 字段如何映射?
【发布时间】:2016-11-26 14:14:08
【问题描述】:

我正在尝试使用 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 存储库和它们通常包含诸如“名称”、“流行度”、“作者”之类的字段,我不确定这些字段实际上代表什么或映射到什么。

【问题讨论】:

    标签: solr spring-boot spring-data-jpa nutch


    【解决方案1】:

    您需要使用@Field 注释定义一个反映您的 SOLR 文档的 Java 对象。

    看看https://www.petrikainulainen.net/programming/solr/spring-data-solr-tutorial-crud-almost/等教程

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多