Solr - 如何提升 Solr 中的字段?没有得到正确的查询

标签 solr field

我正在使用 Solr 1.4.1。我需要提升一个领域。我的 schema.xml 如下:

<?xml version="1.0" ?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<schema name="default" version="1.1">
  <types>
    <fieldtype name="string"  class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>

    <!-- Numeric field types that manipulate the value into
     a string value that isn't human-readable in its internal form,
     but with a lexicographic ordering the same as the numeric ordering,
     so that range queries work correctly. -->
    <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>

    <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <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>

    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      </analyzer>
    </fieldType>

    <fieldType name="ngram" class="solr.TextField" >
      <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" />
      </analyzer>
      <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

    <fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
      <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
      </analyzer>
      <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
      </analyzer>
    </fieldType>
  </types>

  <fields>   
    <!-- general -->
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
    <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false" />
    <field name="django_id" type="string" indexed="true" stored="true" multiValued="false" />

    <dynamicField name="*_i"  type="sint"    indexed="true"  stored="true"/>
    <dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>
    <dynamicField name="*_l"  type="slong"   indexed="true"  stored="true"/>
    <dynamicField name="*_t"  type="text"    indexed="true"  stored="true"/>
    <dynamicField name="*_b"  type="boolean" indexed="true"  stored="true"/>
    <dynamicField name="*_f"  type="sfloat"  indexed="true"  stored="true"/>
    <dynamicField name="*_d"  type="sdouble" indexed="true"  stored="true"/>
    <dynamicField name="*_dt" type="date"    indexed="true"  stored="true"/>

    <field name="location_ad" type="text" indexed="true" stored="true" multiValued="false" />
    <field name="text" type="text" indexed="true" stored="true" multiValued="false" />
    <field name="location_ad_exact" type="string" indexed="true" stored="true" multiValued="false" />
    <field name="date_inserted" type="date" indexed="true" stored="true" multiValued="false" />
    <field name="zone_ad_exact" type="string" indexed="true" stored="true" multiValued="false" />
    <field name="country_ad" type="text" indexed="true" stored="true" multiValued="false" />
    <field name="job_description" type="text" indexed="true" stored="true" multiValued="false" />
    <field name="zone_ad" type="text" indexed="true" stored="true" multiValued="false" />
    <field name="job_title" type="text" indexed="true" stored="true" multiValued="false" />
  </fields>

  <!-- field to use to determine and enforce document uniqueness. -->
  <uniqueKey>id</uniqueKey>
  <!-- field for the QueryParser to use when an explicit fieldname is absent -->
  <defaultSearchField>text</defaultSearchField>
  <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
  <solrQueryParser defaultOperator="AND" />
</schema>

我需要执行以下操作:我需要更加重视“job_title”字段。例如,如果我正在搜索“程序员”一词,我需要首先显示在“job_title”字段中按日期排序的结果中包含“程序员”的结果,然后是在“工作描述”字段。最好举个例子,我的英语不是世界上最好的;)

我有这个数据:

job_title                | job_description                    | date_inserted
programmer               | job for IT guys                    | 10-Nov-2011
IT Python                | for python programmer              | 12-Nov-2011
PHP programmer           | PHP programming                    | 08-Nov-2011

例如,我需要在搜索“程序员”一词时更加重视“job_title”字段,但也会在结果中显示“job_description”字段中包含“程序员”一词的文档。我还需要重视“date_inserted”字段,以便结果显示如下:

job_title                | job_description                    | date_inserted
programmer               | job for IT guys                    | 10-Nov-2011
PHP programmer           | PHP programming                    | 08-Nov-2011
IT Python                | for python programmer              | 12-Nov-2011

我正在做这样的查询:

/?facet=on&sort=date_inserted+desc&fl=*+score&start=0&q=programmer&bf=job_title:programmer^1.50&facet.field=location_ad_exact&facet.field=zone_ad_exact&fq=django_ct:(myapp.jobsadstext)&rows=20

但是这个查询的结果不是我需要的。

谁能告诉我实现结果需要遵循的轨迹?

最好的问候,

最佳答案

  1. 您必须使用 DisMax 查询解析器“defType=dismax”)才能使用提升。
  2. 使用 qf 参数进行字段查询(在您的示例中,您使用的是 bf - boost 函数)

http://wiki.apache.org/solr/DisMaxQParserPlugin#qf_.28Query_Fields.29

关于Solr - 如何提升 Solr 中的字段?没有得到正确的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392768/

相关文章:

php - 将 Solr 与 PHP 结合使用

tomcat - 日志没有错误,但是SolrCore初始化失败?

solr - 突出显示 Solr 字段

lucene - .NET 站点上的 Solr

java - Solr 是否可以在不重新启动 Solr 的情况下加载新的 log4j.properties 配置文件?

java - 在运行时获取字段值

java - Eclipse java继承方法和字段

ios 知道如何创建类似 "To:"短信或电子邮件字段的字段吗?

java - 在运行时创建带有注释字段的 java 类

mysql - 如何将excel数据导入到drupal中的5个指定字段