查询仅以数字开头的数据

时间:2011-11-08 06:24:44

标签: solr

您好我在Solr中有一个以1位或更多位数开头的字段。 例如

  • 123Adam-R测试

  • 2亚当测试

  • 534534As

  • ABCSD

  • 一个人

如何配置字段类型,以便它匹配任何仅以数字开头的数据?请建议。

我创建了这种类型,但它以其他方式剥离数字留下字符 例如数据“123ABCSD”它最终“ABCSD”。我想发出查询q = 0:9或somefield:应该返回仅以数字开头的行。

<fieldType name="numbersfirst" class="solr.TextField">
    <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9]+([^[0-9]]*)" replacement="" replace="all"/>
    </analyzer>
</fieldType>

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是创建一个单独的布尔字段,该字段仅存储您的字段是否以数字开头。然后,当您进行索引时,只需自己解析字段并相应地设置布尔字段。然后它是针对该布尔字段的简单查询。

答案 1 :(得分:0)

     <script>
    <![CDATA[
            function findInfoStartingWithNumber(row)    {

                var patternStr = "^[0-9]+([^[0-9]]*)";
                var pattern = java.util.regex.Pattern.compile(patternStr);
                var inputStr = (row.get('name') == null ? "" : row.get('name').toString().trim().toUpperCase());
                var matcher = pattern.matcher(inputStr);
                var matchFound = matcher.find(); // false                   
                row.put('StartsWithNumber',matchFound);

                return row;
            }
    ]]>
</script>
<entity name="MaterialInfo" transformer="script:findInfoStartingWithNumber" query="">

如果有人想知道上述元素在db-data-config.xml元素结构下的位置

<dataconfig>
 <datasource>
  <script>
  </script>
  <document>
  <entity></entity>
 </document>
</datasource>