Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
无法在Solr中搜索两个以上的单词_Solr - Fatal编程技术网

无法在Solr中搜索两个以上的单词

无法在Solr中搜索两个以上的单词,solr,Solr,我正在使用apache-solr-3.4.0。我可以使用单个单词进行搜索,但不能使用多个单词进行搜索。例如:jobTitle:tester生成结果,但是jobTitle:java开发人员不返回任何结果 在我的schema.xml中,我为文本字段类型添加了如下代码: Solr还有一个NGRAMPilterFactory。尽量不要使用ngram标记器。我建议使用“WhitespaceTokenizer”,然后应用ngram过滤器 <filter class="solr.NGramFilterF

我正在使用apache-solr-3.4.0。我可以使用单个单词进行搜索,但不能使用多个单词进行搜索。例如:
jobTitle:tester
生成结果,但是
jobTitle:java开发人员
不返回任何结果

在我的schema.xml中,我为文本字段类型添加了如下代码:


Solr还有一个
NGRAMPilterFactory
。尽量不要使用ngram标记器。我建议使用“
WhitespaceTokenizer
”,然后应用ngram过滤器

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="3" />

您的字段类型应如下所示:

<fieldType name="text_custom" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10" />
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>


您有几个选项,按易用性排序

  • 在查询的部分周围使用括号
    ,这些部分将转到一个字段进行分组,例如
    作业标题:(java开发人员)
    。不要简单地在它们周围加上引号“,这将作为不同的短语查询执行
  • 使用每个查询定义一个备用默认字段,例如
    {!df=jobTitle}java developer
    。这将使查询的所有部分都转到该字段
  • 在每个请求处理程序的solrconfig.xml中指定更好的默认搜索字段,这需要在配置后重新启动
  • 使用eDismax或Dismax查询处理程序作为默认值,定义搜索输入所需的字段。您可以将这些字段想象为选项(2)的扩展,在选项(2)中有多个默认字段。这将要求您更改solrconfig.xml,但不要求您重建索引
  • 改进默认字段的内容,使其成为包含所有字段或至少所有相关字段的所有内容的更好的“捕获所有”字段。这将要求您考虑架构设计,更改schema.xml并重建索引
  • 背景
    假设Solr在每个空白处将搜索查询拆分为多个部分(实际上,这并不是那么简单,但足以作为一个开始)。每个部分都根据指定字段或默认字段进行处理。取自

    该字段仅对其直接前面的术语有效,因此查询title:Do it right将在title字段中仅找到“Do”。它将在默认字段(在本例中为文本字段)中找到“it”和“right”


    添加并重新启动了tomcat,但仍不工作。在apache或任何其他配置上是否需要执行任何操作?或者是否存在任何其他权限问题?在将字段类型添加到schema.xml之后。请为字段使用相同的字段类型。完成后,重新启动tomcat。如果您的更改正在反映,请参阅solr admin页面上的。请尝试su用引号引述以下术语:
    jobTitle:“java开发人员”
    否则查询将在
    jobTitle:java\u text\u:developer
    处解释。您还可以传递“debugQuery=true”“查看您的查询,并在结果中查看Solr是如何解析您的查询的,并确保它符合您的预期。我同意@Hector。。。我错过了那部分。。。