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的时候传入的值就是正确的类型。
浙公网安备 33010602011771号