2

我在使用 Solr 时遇到问题:

当我的 url 中的字符 '&' 包含 ('%26') 时,这不起作用:

http://localhost:8983/solr/LOREMIPSUM/select?q=shop_id:42+label_fr_str:LOL%26rows=20&indent=off

<result name="response" numFound="0" start="0">

但如果不是这样,我有 4223 个结果:

http://localhost:8983/solr/LOREMIPSUM/select?q=shop_id:42+label_fr_str:LOL&rows=20&indent=off

<result name="response" numFound="4223" start="0">

我有点失落。是否与请求或 Solr 的配置有关以解决它?或者这是不可能的?

编辑 :

我的 schema.xml 中定义的字段

<fieldType name="text" class="solr.TextField"
    positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" generateNumberParts="1" catenateWords="1"
            catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" generateNumberParts="1" catenateWords="0"
            catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>

现场声明:

<field name="label_fr_str" type="text" indexed="true" stored="true" multiValued="false"/>
4

1 回答 1

4

因此,我对查询字符串进行了一些尝试,并且能够重现类似的行为。我认为问题的根源在于,如果您在参数之后为下一个参数编码与符号q,Solr 会将其解释为查询的一部分,而不是查询字符串参数。

根据您在评论中提供的编码示例,您将查询参数(在本例中为行)与查询本身混合。我建议将这些分开。您是否考虑使用SolrJ客户端。我意识到您可能不想使用 SolrJ 客户端,但我认为您至少应该考虑使用它的ClientUtils方法来帮助您正确构建/编码您的 url。

于 2013-04-23T15:52:40.587 回答