1

我在为子字符串创建 Solr 搜索时遇到问题。例如,当用户搜索“Alfa Romeo Land Car”时,我只想匹配完整的品牌(只匹配“Alfa Romeo”,而不是“Land Rover”)。我尝试这样做的方法是从我的查询中创建带状疱疹,然后尝试与我的“汽车品牌”Solr 核心进行完全匹配。

因此,如果用户搜索“AB C”,我想获得带状疱疹 [A, AB, ABC, B, BC, C]。

但是当我使用下面的 Solr 配置时,当我搜索“AB C”(使用 EDisMax 或标准查询解析器)时,Solr 什么也不返回,但如果搜索“ABC”,我会得到匹配结果“ABC”。

这是我的 schema.xml 文件:

<field name="id"             type="tint" indexed="true" stored="true" required="true"/>
<field name="name"           type="text_exact" indexed="true" stored="true" required="true"/>
<field name="seoAlias"       type="string" indexed="true" stored="true" required="true"/>


<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="0" generateWordParts="0" catenateAll="1" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="0" generateWordParts="1" catenateAll="0" />
        <filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramsIfNoShingles="true" tokenSeparator="" maxShingleSize="5"/>
      </analyzer>
    </fieldType>

以下是我的 Solr 核心中的文档:

"response": {
    "numFound": 7,
    "start": 0,
    "docs": [
      {
        "id": 1,
        "name": "A B C D",
        "seoAlias": "abce",
        "_version_": 1524585748644233200
      },
      {
        "id": 2,
        "name": "A B C",
        "seoAlias": "abce",
        "_version_": 1524586301229105200
      },
      {
        "id": 3,
        "name": "B C D",
        "seoAlias": "abce",
        "_version_": 1524586311147585500
      },
      {
        "id": 4,
        "name": "A B",
        "seoAlias": "abce",
        "_version_": 1524586322261442600
      },
      {
        "id": 5,
        "name": "B C",
        "seoAlias": "abce",
        "_version_": 1524586329997836300
      },
      {
        "id": 6,
        "name": "C D",
        "seoAlias": "abce",
        "_version_": 1524586338173583400
      },
      {
        "id": 7,
        "name": "B",
        "seoAlias": "abce",
        "_version_": 1524652609127841800
      }
    ]
  },

在 Solr 管理网页中,如果我转到“模式浏览器”,然后选择有问题的字段,然后按“加载术语信息”,我可以看到以下索引术语:

6
 /6 Top-Terms:  
1
ABC
ABCD
BC
BCD
CD
AB

当我搜索“AB C”时,我想要以下带状疱疹 [ABC AB BC ABC] 但从调试查询中我得到:

"response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  },
  "debug": {
    "rawquerystring": "*:*",
    "querystring": "*:*",
    "parsedquery": "MatchAllDocsQuery(*:*)",
    "parsedquery_toString": "*:*",
    "explain": {},
    "QParser": "LuceneQParser",
    "filter_queries": [
      "name:\"A B C\""
    ],
    "parsed_filter_queries": [
      "**MultiPhraseQuery**(name:\"(A AB ABC) (B BC) C\")"
    ], 

我认为问题可能与MultiPhraseQuery有关。它创建了看似正确的带状疱疹,但似乎 Solr 不使用这些字符串进行搜索。有人知道我错过了什么吗?

非常感谢提前

4

0 回答 0