SOLR搜索部分匹配的名称

SOLR搜索部分匹配的名称,solr,Solr,我有一个SOLR服务器,它的核心是人名,我现在尝试了多种配置,但没有找到最适合我们需要的配置 核心中的典型条目包括: { "Post_code":"7001", "Full_name":"Ole Sverre Haugset", "First_name":"Ole Sverre", "id":3809194, "Last_name":"Haugset", "Full_address":"Some street 112, 7001", "_v

我有一个SOLR服务器,它的核心是人名,我现在尝试了多种配置,但没有找到最适合我们需要的配置

核心中的典型条目包括:

{
    "Post_code":"7001",
    "Full_name":"Ole Sverre Haugset",
    "First_name":"Ole Sverre",
    "id":3809194,
    "Last_name":"Haugset",
    "Full_address":"Some street 112, 7001",
    "_version_":1643841934565834759}]
}
我们使用
Full\u name
属性来搜索人员。然而,人们通常不知道他们正在搜索的人的中间名

现在,我可以通过搜索以下内容来找到此条目:

  • 奥勒·斯韦里·豪
  • 豪塞特
  • 奥勒斯维尔
但在搜索“Ole Haugset”时没有命中

现在,这是我用于此字段的配置:

<field name="Full_name" type="text_ngrm" indexed="true" stored="true"/>
<fieldType name="text_ngrm" class="solr.TextField" positionIncrementGap="100">

我也尝试了一些其他配置,但没有取得任何重大成功。 最后一项是:

<field name="Full_name" type="text_general" indexed="true" stored="true"/>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <!-- 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.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>


在搜索sverre haugset时,只要您在正确的字段中搜索,最后一个版本应该会给您带来成功。如果使用edismax作为查询类型(defType iirc),则在
qf
参数中包含
Full\u name
,在
q
参数中仅包含查询文本。您可以使用
debug=all
获取有关查询处理方式的调试信息。请记住,在更改字段类型后,需要清除索引并重新索引内容,以获得行为上的任何(适当)更改。给梅格发一封邮件给杜·特伦格·默尔·德塔尔杰特·赫杰普:-)嘿,马斯林德,谢谢你的回复。我最挣扎的问题,也许我还不够清楚,是我需要点击“Ole Haugset”,中间的名字省略了。如果你没有在你的查询中加上引号,@MatsLindh说的是真的。这会将它们转换为短语查询,因此您需要引入,以便在有中间令牌时进行匹配?Demax或eDiscoveryMax应该返回结果。Mats和Scott也是对的,不要在引号中搜索。短语在大多数情况下并不是你想要的搜索结果。