Solr索引和查询文本 - 在其中

时间:2014-07-28 04:56:23

标签: solr

Solr的新手,它已经运行并导入了一些示例数据,在配置架构时需要按照它需要的方式工作。 我真的想做的是索引字符串字段,并能够使用开头搜索它。因此,例如,如果字段A具有汽车1,胡萝卜,汽车-3,城堡,汽车,轿车2,汽车3等的重新定位,那么当我进入汽车时,我希望所有人都可以通过“汽车”首先返回订单(全字汽车)匹配最多(例如:胡萝卜和汽车前的汽车1)(然后是带数字/破折号的汽车),基本上是字母数字排序。

我如何配置这样的fileds索引/分析器属性来实现这一目标? 使用我当前的配置,我可以搜索,但结果不会返回alhanumeric,我无法搜索符号“ - ”。

该字段应处理具有空格和破折号的值,如上例所示。

这是我基于gogoled的一些信息对该字段的当前配置:

<!-- A text field that only splits on whitespace for exact matching of words -->
    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      </analyzer>
    </fieldType>

    <!-- A text type for English text where stopwords and synonyms are managed using the REST API -->
    <fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ManagedStopFilterFactory" managed="english" />
        <filter class="solr.ManagedSynonymFilterFactory" managed="english" />
      </analyzer>
    </fieldType>

感谢您的协助

1 个答案:

答案 0 :(得分:0)

默认情况下,结果由分数返回,分数是使用一系列不同因素计算得出的。如果您想要一个简单的字母数字排序,请在查询中添加&sort=sort_fieldname

请注意,您不希望按生成多个令牌的TextField(您的示例中为text_wsmanaged_en而对TextFields进行排序)(因此WhitespaceTokenizer和{{1}对于排序字段,如果您需要分析器或过滤器,请使用StandardTokenizer。如果您不需要对该字段执行任何操作(例如小写等),请使用KeywordTokenizer代替,因为它是逐字存储的。

我猜测下一个问题是“但是......我需要提交两次数据吗?”所以不,在你的模式中使用StrField来发送进入{{1的值} copyField很好,并为该字段应用了不同的类型/分析器链。在Lucene(以及扩展的Solr)中,您可以添加具有不同链的字段来解决特定问题。排序就是这样一个问题,与实际搜索有所不同。