solr中field类型自动转换导致的问题

先把结论说在前面:最好在index的时候传入的值就是正确的类型。

solr中会自动转换类型,比如shema定义:

<field name="vstamp" type="plong"/>
<field name="vstamp2" type="string"/>

index一个doc:

{
    "id":"doc11",
    "vstamp":"1",
    "vstamp2":1,
    "a_s":"1111"
}

搜索结果显示:

{
    "id":"doc11",
    "vstamp":1,
    "vstamp2":"1",
    "a_s":"1111",
    "_version_":1616988611881730048,
    "score":1
}
  • vstamp是long型,虽然index时输入时一个字符串,但是最后的结果是long。
  • vstamp2是string型,虽然index时输入的是一个int,但是最后的结果是string。
    这一准则适用于update,以及partial update。

但是,在某些功能中可能会影响工作,比如DocBasedVersionConstraintsProcessorFactory(实际工作的不是Factory,而是Processor,不过不重要,只是指明配置中的出处),它在工作时,会读取传入的新的version值(假设是一个string),以及index中旧version值(假设是一个long),但它并不会自动进行转换(把输入的string转换成long再进行比较)。
这时可能会遇到输入vstamp2的类型还是long(未经转换成真是的field类型),已经存在的doc的vstamp2的类型却是string,然后试图比较一个string和一个long的值,然后报错类型不匹配。
所以结论是:最好在index的时候传入的值就是正确的类型。

posted @ 2020-11-09 11:40  爪哇国的小蚂蚁  阅读(164)  评论(0)    收藏  举报