代码之家  ›  专栏  ›  技术社区  ›  Shubham Yelikar

Solr:如何在字段类型“string”中搜索忽略大小写的记录?

  •  1
  • Shubham Yelikar  · 技术社区  · 6 年前

    我已为我的收藏中的以下记录编制了索引

     {
            "app_name":"atm inspection",
            "appversion":1,
            "id":"app_1427_version_2449",
            "icon":"/images/media/default_icons/app.png",
            "type":"app",
            "app_id":1427,
            "account_id":556,
            "app_description":"inspection",
            "_version_":1599625614495580160}]
      }
    

    除非我搜索记录时区分大小写,也就是说如果我写下面的Solr查询来搜索app\u名称包含 自动取款机 然后Solr返回高于响应的值,这是一种正确的行为。

    http://localhost:8983/solr/NewAxoSolrCollectionLocal/select?fq=app_name:*atm\ *&q=*:*

    但是,如果我执行以下Solr查询来搜索app\u name包含 自动取款机

    http://localhost:8983/solr/NewAxoSolrCollectionLocal/select?fq=app_name:*ATM\ *&q=*:*
    

    Solr没有返回上述响应,因为ATM=atm。

    有人能帮我用Solr查询无意识地搜索记录案例吗。

    非常感谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   MatsLindh    6 年前

    不能。字段类型 string 需要精确匹配(它是为字段值存储的单个未处理标记)。

    方法是使用 TextField 与关联的 Tokenizer 和a LowercaseFilter .如果您使用 KeywordTokenizer ,整个标记将保持完整(因此不会像您通常使用标记器所设想的那样进行拆分),并且由于它是一个文本字段,因此可以关联一个分析链,从而允许您添加一个小写过滤器。

    据我所知,LowerCaseFilter支持多项,但请记住,通配符查询通常不会应用任何筛选器。因此,您应该在自己创建查询之前将该值小写(即使在这种简单的情况下它可能会起作用)。