我在Solr中有一个字段,其中包含通常遵循以下格式的注册号:
"prop_33": "1923,1110.112"
句点之后的位数是可变的,但这实际上不是浮点数,句点不应该表示小数点。
编辑:“prop_33”的Solr字段类型是TextField
我正在使用Haystack来查询Solr,当我调用SearchResult.get_additional_fields()
然后从结果字典中获取注册号时,它会将其视为int和float的元组。如果我打电话给str()
来转换它,那么它会绕过它认为的第二个数字而产生一些荒谬的东西,例如:
Museum Number (BM Registration Number ) : (1923, 1110.1120000000001).
由于这实际上不是一个数字,这对我的用户来说毫无意义。如何从SearchResult
获取确切的字符串,而不将其转换为整数列表?
我还在学习Haystack和Django,所以我对这一切都有点新鲜。
编辑:我在这里查询索尔:_result_object.html - 模板
<div id="collapsemed{{ obj.id }}" class="panel-collapse collapse">
<table class="table table-striped">
{% get_result_details result.get_additional_fields %}
</table>
</div>
base_tags.py - 模板标签
@register.simple_tag
def get_result_details(fields):
rowhtml = ''
for field, value in fields.items():
if field.startswith('prop_'):
prop_num = field[5:]
try:
prop = DescriptiveProperty.objects.get(id=prop_num)
try:
row = '<tr><td>' + prop.property + '</td><td>' + value + '</td></tr>'
except TypeError:
row = '<tr><td>' + prop.property + '</td><td>' + str(value) + '</td></tr>'
rowhtml += row
except DescriptiveProperty.DoesNotExist:
pass
return rowhtml
更新:当Haystack从索引返回SearchQuerySet
时,似乎会出现问题。索引中的注册号是正确的,但是当我从控制台执行以下操作时:
>>> from haystack.query import SearchQuerySet
>>> s = SearchQuerySet().filter(prop_31 = 116565)
>>> s.values('prop_33')
[{'prop_33': (1923, 1110.1659999999999)}]
现在它已成为一个元组。有没有办法告诉Haystack将索引中的所有值都视为字符串???
更多更新:我尝试将schema.xml中prop_33字段的type属性从“text_en”更改为“string”,但没有区别。
旧Schema.XML:
<dynamicField name="prop_*" type="text_en" indexed="true" stored="true"/>
New Schema.XML:
<dynamicField name="prop_*" type="string" indexed="true" stored="true"/>
与之前在网页上的结果相同,并从控制台打印。