Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApacheSolr筛选查询包含-&引用;don';行不通_Apache_Solr_Parameters_Filtering - Fatal编程技术网

ApacheSolr筛选查询包含-&引用;don';行不通

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

我有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/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
中创建一个analyzer
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%起作用。如果这对您有帮助,请告诉我:)。

谢谢!,我正在使用StandardTokinzerFactory,但我只需要将过滤查询参数粘贴到“谢谢!,我使用StandardTokinzerFactory,但我只需要将筛选查询参数粘贴到“”中。这是个好主意,但我发现速度更快。我只需要将筛选查询参数粘贴到“”&fq=url:“恩恩”我读了@skm答案,那肯定更好。只是不知道你的模式设置。这是个好主意,但我发现更快。我只需要将筛选查询参数粘贴到“”&fq=url:“恩恩”我读了@skm答案,那肯定更好。只是不知道您的架构设置。