首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOLR大小写不敏感字段搜索问题

SOLR大小写不敏感字段搜索问题
EN

Stack Overflow用户
提问于 2016-10-01 09:12:14
回答 1查看 171关注 0票数 0

我想要实现的是,当我搜索test,给我带来也不区分大小写的Test, TeSt, TesT,TEST搜索。我该怎么办?

我的schema.xml中有一个分配给test_fieldtest_field类型

代码语言:javascript
复制
<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </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"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="select">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

以下是我想在查询中得到的结果。

代码语言:javascript
复制
{
  "responseHeader":{
    "status":0,
    "QTime":2,
    "params":{
      "q":"test_field:*",
      "indent":"true",
      "wt":"json"}},
  "response":{"numFound":5,"start":0,"docs":[
      {
        "id":"change.me",
        "test_field":["test"],
        "_version_":1546932094148542464},
      {
        "id":"change.me1",
        "test_field":["tesT"],
        "_version_":1546932100203020288},
      {
        "id":"change.me2",
        "test_field":["TesT"],
        "_version_":1546932103122255872},
      {
        "id":"change.me3",
        "test_field":["TEsT"],
        "_version_":1546932107768496128},
      {
        "id":"change.me4",
        "test_field":["TEST"],
        "_version_":1546932111283322880}]
  }}

当我使用这个查询时,它不会给出任何结果,因为它区分大小写,即使它有过滤器LowerCaseFilterFactory

http://localhost:8983/solr/test-data/select?q=test_field:*test*&wt=json&indent=true

以及空洞的结果。(我做错了什么?)

代码语言:javascript
复制
{
  "responseHeader":{
    "status":0,
    "QTime":2,
    "params":{
      "q":"test_field:*test*",
      "indent":"true",
      "wt":"json"}},
  "response":{"numFound":1,"start":0,"docs":[
      {
        "id":"change.me",
        "test_field":["test"],
        "_version_":1546932094148542464}]
  }}
EN

回答 1

Stack Overflow用户

发布于 2016-10-02 00:54:03

你真的把星星(通配符)放在搜索词的两端吗?你不应该那么做。Solr配置的全部目的是以一种无需通配符搜索单词的方式来标记文本。

如果你只是在你的文本中搜索一个作品,它应该包括混合大小写匹配。如果不是,请检查您的字段实际上映射到正确的类型,并重新编制索引。如果还不清楚,something有一个分析屏幕,您可以在其中选择字段(或字段类型),查看某些内容是如何标记的,以及如何匹配。你可以在那里做实验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39804866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档