我的Solr的schema.xml有很多整数字段。
如何对int字段进行通配符搜索?我有很多关于int值的动态字段,如下所示。
<dynamicField name="*_nbr" type="int" stored="true"/>
例如:
我有一个名为store_nbr
的字段,我想找到所有以280开头的商店。
我尝试过store_nbr:280*
,但它没有返回任何结果。同样,我有很多这样的整数字段。
答案 0 :(得分:3)
虽然来自@Kumar的答案暗示了正确的方向(但是没有使用默认schema.xml中的文本字段,因为它将在查询和索引时处理任何输入),解释是你可能需要一个新字段来执行外卡查询,除非您可以将查询转换为实际的整数操作(如果所有store_nbr-s长度相同)。
添加一个StrField(在默认的schema.xml中,有一个名为“string”的已定义类型,它是一个符合此目的的简单字符串字段):
<field name="store_nbr_s" type="string" indexed="true" stored="false" />
添加一个copyField指令,在索引时将store_nbr
字段中的值复制到字符串字段中:
<copyField source="store_nbr" dest="store_nbr_text" />
然后使用您已经描述的语法(store_nbr:280*
)在此字段中查询前缀匹配。
如果这个特定的查询格式(查询store_nbr的三个第一个数字)非常常见,那么你需要转换内容的方式来索引专用字段中的三个第一个数字,因为它会为您提供更好的查询性能和更小的缓存。
如果您正在进行大量的外卡查询(在*前面有不同的长度),请查看是否有一个字段生成EdgeNGrams,因为这些将为您提供solr查找的专用令牌而不是狂野卡搜索可能必须遍历更大的可能令牌集以确定是否应该返回该文档。
答案 1 :(得分:0)
请参阅this回答。您必须在{solr_home} / example / solr / your_collection /conf/schema.xml中的schema.xml中添加指令链接,如该答案所示。复制所有字段以使其可搜索通配符查询。