Solr从ace001搜索词中删除'e'

时间:2016-11-06 21:26:09

标签: solr lucene

Solr正在从搜索查询中删除字母'e'...

对于Solr来说,我很新,所以我真的不知道从哪里开始想要解决这个问题,但每当我发送搜索查询时,Solr都会删除'e'字符...

正如您在尝试搜索术语ace001

时所看到的那样
{
  "responseHeader": {
    "status": 0,
    "QTime": 1,
    "params": {
      "q": "_text:ace001",
      "indent": "true",
      "wt": "json",
      "debugQuery": "true",
      "_": "1478467316690"
    }
  },
  "response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  },
  "debug": {
    "rawquerystring": "_text:ace001",
    "querystring": "_text:ace001",
    "parsedquery": "PhraseQuery(_text:\"ac 001 ac 001\")",
    "parsedquery_toString": "_text:\"ac 001 ac 001\"",
    "explain": {},
    "QParser": "LuceneQParser",
    "timing": {
      "time": 1,
      "prepare": {
        "time": 1,
        "query": {
          "time": 1
        },
        "facet": {
          "time": 0
        },
        "mlt": {
          "time": 0
        },
        "highlight": {
          "time": 0
        },
        "stats": {
          "time": 0
        },
        "spellcheck": {
          "time": 0
        },
        "debug": {
          "time": 0
        }
      },
      "process": {
        "time": 0,
        "query": {
          "time": 0
        },
        "facet": {
          "time": 0
        },
        "mlt": {
          "time": 0
        },
        "highlight": {
          "time": 0
        },
        "stats": {
          "time": 0
        },
        "spellcheck": {
          "time": 0
        },
        "debug": {
          "time": 0
        }
      }
    }
  }
} 

搜索“acb001”之类的其他术语并不会删除“b”,但我注意到它确实将数字与字母分开。我希望Solr在文本字段中匹配术语'acb001'......

提取物:

"rawquerystring": "_text:acb001",
"querystring": "_text:acb001",
"parsedquery": "PhraseQuery(_text:\"acb 001 acb 001\")",
"parsedquery_toString": "_text:\"acb 001 acb 001\"",
"explain": {},
"QParser": "LuceneQParser",

我真的很欣赏这方面的一些方向,以便我可以进一步调试或理想地解决这个问题,以便ace001返回所有出现的情况。

编辑:

架构是标准/默认http://pastebin.com/59LbmJUp

1 个答案:

答案 0 :(得分:4)

这是因为solr.PorterStemFilterFactory而发生的。您的默认搜索字段ID是具有
的htmltext B

在查询分析中。

PorterStemmer源于" ace"到" ac"。 你可以在这里查看https://tartarus.org/martin/PorterStemmer/voc.txt 搜索单词" ace"。 现在看看这里有什么相应的输出,在词干之后堵塞https://tartarus.org/martin/PorterStemmer/output.txt相应的词,这将是" ac"

解决此问题,查询过程中的过滤器以及solrconfig.xml中的索引

此外,您正在使用 WordDelimiterFilterFactory ,它将在字母数字bounderies上分割单词。这就是为什么你看到" ac"和" 001",如果你不想那样,那么在schema.xml

中也删除那个过滤器

您使用的是默认的schema.xml,其中包含许多您可能不需要的不必要的过滤器。我建议将其拆分为几个过滤器。然后根据需要添加过滤器而不是其他方式。