干草堆将字符串从Solr转换为int

时间:2014-08-25 16:33:49

标签: python django solr django-haystack

我在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"/>

与之前在网页上的结果相同,并从控制台打印。

0 个答案:

没有答案