SOLR案例不敏感字段搜索问题

时间:2016-10-01 09:12:15

标签: search solr case-insensitive

我想要实现的是当我在DataGrid之后搜索时,我也UIVirtualization进行不区分大小写的搜索。 我该怎么办?

我的schema.xml中有test类型,分配给Test, TeSt, TesT,TEST

textgen

以下是我想通过查询收到的结果。

test_field

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

<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>

和空结果。 (我做错了什么?)

{
  "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}]
  }}

1 个答案:

答案 0 :(得分:0)

您实际上是在搜索字词的两端放置星标(通配符)吗?你不应该这样做。 Solr配置的重点是以一种只搜索没有通配符的单词来标记文本。

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