我在schema.xml:中定义了一个这样的字段
<field name="ImageThumbnail" type="string" indexed="false" stored="true" required="false" />
我在文档中存储了图像缩略图的Base64字符串表示,因此我们的搜索结果屏幕可以呈现这些缩略图。这非常有效;我们在浏览器客户端中显示人和对象的图像。
问题是base64字符串的文本是可搜索的,即使schema.xml中设置了indexed="false"。
我通过为一辆汽车制造的短手车(大众汽车的缩写)打字找到了这一点,我得到了两次点击。它不会返回任何命中突出显示信息,而是返回一些匹配的记录。
我进一步搜索了"4AAQSkZJRgABAQEAYABgAAD",再次获得了150多个点击,所有点击都与ImageThumbnail列中的字符串匹配。
我错过了什么?如果Indexed="false",Solr如何在该字段上搜索和查找匹配项?如果不是Indexed="false",还有什么可以关闭字段搜索?
我正在进行/select查询,作为参考,这里是我的/select请求处理程序:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">250</int>
<str name="wt">json</str>
<str name="hl">true</str>
<str name="hl.fl">*</str>
<str name="indent">true</str>
<str name="df">text</str>
</lst>
感谢您的任何想法/建议;VW(在处理车辆时)将是一个常见的搜索术语,我需要排除图像字符串进行匹配。
好吧,令牌存在于您正在搜索的字符串中。您可能没有针对ImageThumbnail
字段进行搜索(您的/select输出似乎表明您正在查询text
字段)。这表示内容存在于text
字段中,可能是因为您有一个copyField
指令,该指令将与您添加到ImageThumbnail
字段的内容相同的内容添加到该字段中。
在您的架构中查找任何copyField指令,查看您的内容是否指向您没有想到的字段(通配符可能会影响这一点)。还要确认在索引时没有将相同的内容添加到文本字段(或者如果您正在查询另一个字段,则为该字段)(这种情况不太可能发生)。