Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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
Ruby on rails Solr查询与筛选器查询的工作方式不同_Ruby On Rails_Filter_Solr - Fatal编程技术网

Ruby on rails Solr查询与筛选器查询的工作方式不同

Ruby on rails Solr查询与筛选器查询的工作方式不同,ruby-on-rails,filter,solr,Ruby On Rails,Filter,Solr,我使用solr已经有一段时间了(扮演solr),但是我遇到了一个非常奇怪的问题,我似乎无法工作 我有一个“文本”字段,我们称之为 audience = [students, teachers, students_teachers, none] 当我发送查询时 q= audience:students 它只返回设置为students的对象 但如果我这样做了 fq= audience:students 我从[学生,学生和老师]那里得到了结果 我尝试过在过滤查询中添加引号、括号和各种各样的内容

我使用solr已经有一段时间了(扮演solr),但是我遇到了一个非常奇怪的问题,我似乎无法工作

我有一个“文本”字段,我们称之为

audience = [students, teachers, students_teachers, none]
当我发送查询时

q= audience:students 
它只返回设置为students的对象

但如果我这样做了

fq= audience:students
我从[学生,学生和老师]那里得到了结果

我尝试过在过滤查询中添加引号、括号和各种各样的内容,但似乎并不像我所期望的那样尊重它们。实际上,我在这里使用了fq的否定端,以向用户隐藏一些结果

我正在使用Solr1.4.1

有什么想法吗?我将要将选项更改为不重复使用的唯一单词。可能是名字中的_有问题

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
  </analyzer>
</fieldType>

字段类型中的WordDelimiterFilterFactory可能正在从字符串“students\u teachers”生成术语“students”和“teachers”

因此,当您搜索“学生”时,它还匹配最初为“学生\教师”的字符串


顺便说一句:Solr是一个非常可配置的工具,可能非常复杂,我建议不要将其视为一个黑匣子,否则你很可能会有越来越多的“WTF时刻”。

观众的字段类型是什么??观众在acts\u As\u Solr术语中既是“t”又是“s”。我使用的所有查询都不是字段类型。。。请检查solr模式。好的,很公平_t=>text和_s=>stringI最终确实从可用的受众值集中删除了“_”,并且所有这些都开始起作用。但是为什么它与q和fq不同呢?这是我觉得奇怪的部分。我做了一些事情,比如fq=观众:(学生)fq=观众:'students'这没关系,得到的结果与q=观众:学生q=观众:(学生)q=观众:'students'@MarkRedding:你在使用demax吗?你能检查一下Solr分析工具吗?