ApacheSolr筛选查询包含-&引用;don';行不通
我有Apache Solr的问题 在我的结果中,我有一个名为url的参数。 它会返回一些结果,就像这样ApacheSolr筛选查询包含-&引用;don';行不通,apache,solr,parameters,filtering,Apache,Solr,Parameters,Filtering,我有Apache Solr的问题 在我的结果中,我有一个名为url的参数。 它会返回一些结果,就像这样 http://domain.com/re-RU/someLink http://domain.com/de-DE/someLink http://domain.com/en-EN/someLink http://domain.com/cl-EN/someLink http://domain.com/ka-EN/someLink 将筛选查询参数添加到查询时: http://ip:port/so
http://domain.com/re-RU/someLink
http://domain.com/de-DE/someLink
http://domain.com/en-EN/someLink
http://domain.com/cl-EN/someLink
http://domain.com/ka-EN/someLink
将筛选查询参数添加到查询时:
http://ip:port/solr/example/select?q=someSentence&fq=url:ru-RU&wt=json&indent=true
它工作得很好,但只适用于de
,ru
语言
当我试图用en-en
过滤某些内容时,我得到的结果也包含cl-en
,ka-en
问题在哪里?
如何解决我的问题?您需要检查schema.xml,因为您的url可能会在“-”上断开,就像在en-en中一样,它可能会分别创建令牌en和en。例如,如果您使用StandardTokenizerFactory作为标记器类,那么en-en将被分解为en和en,de de为de和de。同样,当您进行查询时,您需要检查在查询时应该使用哪个标记器,因为如果您在查询时使用StandardTokenizerFactory,则fq=en en也将被分为标记en和en。有关Tokenizer的更多信息,请检查:您需要检查schema.xml,因为您的url可能会在“-”上断开,就像在en-en中一样,它可能会分别创建令牌en和en。例如,如果您使用StandardTokenizerFactory作为标记器类,那么en-en将被分解为en和en,de de为de和de。同样,当您进行查询时,您需要检查在查询时应该使用哪个标记器,因为如果您在查询时使用StandardTokenizerFactory,则fq=en en也将被分为标记en和en。有关tokenizers的更多信息,请检查:在
schema.xml
中创建分析器urlFilter
,如下所示
<fieldType name="urlFilter" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhiteSpaceTokenizerFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateNumberParts="1" stemEnglishPossessive="1"generateWordParts="1" preserveOriginal="1" catenateWords="1"/>
<filter class="solr.LowercaseFilterFactory"/>
</analyzer>
然后,像这样查询
http://ip:port/solr/example/select?q=someSentence&fq=url:*ru-RU*&wt=json&indent=true
这将100%起作用。让我知道这是否对您有帮助:)。在您的
schema.xml
中创建一个analyzerurlFilter
,如下所示
<fieldType name="urlFilter" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhiteSpaceTokenizerFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateNumberParts="1" stemEnglishPossessive="1"generateWordParts="1" preserveOriginal="1" catenateWords="1"/>
<filter class="solr.LowercaseFilterFactory"/>
</analyzer>
然后,像这样查询
http://ip:port/solr/example/select?q=someSentence&fq=url:*ru-RU*&wt=json&indent=true
这将100%起作用。如果这对您有帮助,请告诉我:)。谢谢!,我正在使用StandardTokinzerFactory,但我只需要将过滤查询参数粘贴到“谢谢!,我使用StandardTokinzerFactory,但我只需要将筛选查询参数粘贴到“”中。这是个好主意,但我发现速度更快。我只需要将筛选查询参数粘贴到“”&fq=url:“恩恩”我读了@skm答案,那肯定更好。只是不知道你的模式设置。这是个好主意,但我发现更快。我只需要将筛选查询参数粘贴到“”&fq=url:“恩恩”我读了@skm答案,那肯定更好。只是不知道您的架构设置。