当前位置: 首页 > 知识库问答 >
问题:

Solr没有正确搜索多值字段

赵雪峰
2023-03-14

例如,在我们的模式中,我们有:

<field name="Key" type="int" indexed="true" stored="true" required="true"/>
<field name="_version_" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="Name" type="text_suggest_ngram" indexed="true" stored="true" required="false"/>
<field name="EmailAddress" type="text_email" indexed="true" stored="true" required="false"/>
<field name="Indexing" type="text_suggest_ngram" indexed="true" stored="true" multiValued="true"/>

大约有20个不同的领域。每个字段都复制到索引中:

<copyField source="Key" dest="Indexing"/>
<copyField source="Name" dest="Indexing"/>
<copyField source="EmailAddress" dest="Indexing"/>

为自定义域类型提供以下标记器:

<fieldType name="text_email" class="solr.TextField"/>

<fieldType name="text_suggest_ngram" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory"/>
            <filter class="solr.EnglishPossessiveFilterFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="2"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.ASCIIFoldingFilterFactory"/>
            <filter class="solr.EnglishPossessiveFilterFactory"/>
        </analyzer>
</fieldType>

更新示例JSON文档(内容为安全性而模糊)“

{
    "Phone": "555",
    "IndexText": [
        "555",
        "7854",
        "",
        "Main App",
        "16",
        "Life MTG L",
        "New MTG LL",
        "Application",
        "574",
        "574",
        "secondexample@example.com",
        "",
        "",
        "M M S N",
        "Open",
        "P",
        "3876 K E 4 O N W 2619 S B",
        "",
        "A",
        "6055 C P E 32 L S C P B G 1501 S B",
        "S I N",
        "1597456 1254735"
    ],
    "Id": "7854",
    "Name": "Open",
    "WP": "",
    "OK": "16",
    "HP": "574",
    "LK": 1048808,
    "FN": "",
    "PN": "",
    "TN": "",
    "FN2": "MS",
    "LN2": "M M S N",
    "CL": "2",
    "Type": "P",
    "Laddr": "3876 K E 4 O N W 2619 S B",
    "EmailAddress": "secondexample@example.com",
    "LES": "A",
    "PA": "6055 C P E 32 L S C P B G 1501 S B",
    "LIT": "S I N",
    "S": "N",
    "Acc": "1597456 1254735",
    "_version_": "1557490405902123010",
    "score": 11.771251
}

字段和内容都是从真实数据中编辑的,但它给出了想法。字段名称和内容都是较长的单词。这是取自SOLR管理搜索界面。

共有1个答案

陆畅
2023-03-14

好的,所以我们的配置出现了两个错误。

  1. EdgeNGramFilterFactory上的克大小为小

正如@Femtorgon指出的,克的大小是不正确的。增加克大小,然后修复完整的电子邮件地址搜索正确。如果我们搜索完整的电子邮件地址,Solr现在可以正确地找到文档。

UAXURLET
text                        secondexample                               e
raw_bytes                   [73 65 63 6f 6e 64 65 78 61 6d 70 6c 65]    [65]
start                       0                                           14
end                         13                                          15
positionLength              1                                           1
type                        <ALPHANUM>                                  <ALPHANUM>
position                    1                                           1
 类似资料:
  • 问题内容: 我为此感到挣扎,我觉得应该可以,但是也许我在做一些愚蠢的事情。搜索: 返回Source1和Source2的数据。在下面添加术语搜索,我希望返回仅包含Source1s的第一次搜索的子集。使用第一个查询或单独运行时,不返回任何内容。 我知道很难看到这些文档,但是可以说“ Element.sourceSystem.name”存在并且可以使用,因为第一个搜索可以正常工作-非常感谢所有输入。 问

  • 我有一个问题与搜索的特殊字符在solr。我的文档有一个字段标题,有时它可以像泰坦尼克号-1999(它有字符-)。当我试图搜索索尔与"-"我收到一个400错误。我试图逃避这个角色,所以我尝试了像“-”和“\-”这样的东西。有了这些变化,solr不会用错误来回应我,但它会返回0个结果。 如何在solr admin中搜索具有该特殊字符(如“-”或“”?)的内容??? 问候 在这里更新您可以看到我当前的s

  • 本文向大家介绍solr范围搜索,包括了solr范围搜索的使用技巧和注意事项,需要的朋友参考一下 示例 age:[50 TO 60] 匹配年龄在50和60之间(包括50和60)的文档 age:{50 TO 60} 匹配年龄在50到60之间(不包括50到60)的文档 age:[* TO 60] 匹配年龄小于或等于60的文档 age:[50 TO *] 匹配年龄大于或等于50的文档 age:{50 to

  • 本文向大家介绍solr 布尔搜索,包括了solr 布尔搜索的使用技巧和注意事项,需要的朋友参考一下 示例 +firstname:john +surname:doe 匹配名字为john且姓氏为doe的文档。+前缀表示搜索词必须出现(AND)。 +firstname:john -surname:doe 匹配名字为john而名字不是doe的文档。-前缀表示不得出现搜索词(否)。 +firstname:j

  • 本文向大家介绍solr 邻近搜索,包括了solr 邻近搜索的使用技巧和注意事项,需要的朋友参考一下 示例 name:"john doe"~1 搜索特定术语距离(〜1)内的多个术语,i.e将查找包含john匿名doe而不包含john第二名doe的文本

  • 概况 背景 Showcase Google Map Solr GitHub https://github.com/phodal/gmap-solr Solr Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索