solr之dynamicField动态字段的使用

业务场景,并不是我们业务的所有字段都需要在schema.xml、managed-schema指定成固定的字段。
<field name="name" type="string" indexed="true" stored="true"/>、<field name="sex" type="string" indexed="true" stored="true"/>这些都是固定的

例如我现在有一个新业务,大概有5个字段,需要拼接在原来的core里面,那么dynamicField就发挥了它的用武之地了。
直接上代码:
schema.xml、managed-schema文件中的配置如下
       <!-- 动态字段 -->
      <dynamicField  name="solrField_s_*" type="text_general_rev" indexed="true" stored="true"/> 存放String类型
      <dynamicField  name="solrField_d_*" type="double" indexed="true" stored="true"/> 存放double类型
      <dynamicField  name="solrField_l_*" type="long" indexed="true" stored="true"/> 存放long类型

     <field name="keywords" type="text_general_rev" indexed="true" stored="true" multiValued="true"/>
     <copyField source="solrField_*" dest="keywords"/>     

java代码:

 public static void testAddPerson(){
        try{
            // 得到请求
            SolrClient sc = getSolrClient();
            // 拼装文本
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id", 1);
            doc.addField("solrField_s_1", "1");
            doc.addField("solrField_s_2", "2");
            doc.addField("solrField_d_1", "2.0");
            doc.addField("solrField_l_1", "1239012320");
            sc.add(doc);
            sc.commit();
        } catch (SolrServerException e) {
            new SolrUtils().logger.error(e.getMessage());
            throw new CenException("solr备注报错");
        } catch (IOException e) {
            new SolrUtils().logger.error(e.getMessage());
            throw new CenException("solr备注报错");
        }
    }

  public static SolrClient getSolrClient() {
        String url = "xxxxx";//这里是solr的实例的请求地址
        return new HttpSolrClient(url);
    }

查询结果:

{
  "responseHeader":{
    "status":0,
    "QTime":135,
    "params":{
      "q":"*:*",
      "indent":"on",
      "wt":"json",
      "_":"1510043041895"}},
  "response":{"numFound":1,"start":0,"docs":[
      {
        "id":1,
        "solrField_s_1":"1",
        "keywords":["1",
          "2",
          "2.0",
          "1239012320"],
        "solrField_s_2":"2",
        "solrField_d_1":2.0,
        "solrField_l_1":1239012320,
        "_version_":1583395999953453056}]
  }}
通过结果可以看出,我的schema.xml里面根本就没配置 solrField_s_1,solrField_s_2,solrField_d_1,solrField_l_1这些字段,但是却能把数据放进去,放进去了,肯定可以根据对应的字段进行查询。


猜你喜欢

转载自blog.csdn.net/meix505/article/details/78469618