Solr MultiPhraseQuery没有返回正确的结果

时间:2016-01-29 01:12:26

标签: search solr shingles

我在创建Solr搜索子字符串时遇到问题。例如,当用户搜索"阿尔法罗密欧陆地车"时,我想只匹配完整的品牌(仅限#34;阿尔法罗密欧",&#34 ;路虎")。我试图这样做的方法是从我的查询中创建带状疱疹,然后尝试与我的"汽车品牌进行完全匹配" Solr核心。

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

但是当我使用下面的Solr配置时,当我搜索" A B 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管理员网页中,如果我转到&#34; Schema Browser&#34;,然后选择相关字段,然后按&#34;加载术语信息&#34;我可以看到以下索引术语:

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

当我搜索&#34; A B C&#34;我想要以下带状疱疹[ABC AB BC A B C] 但是从调试查询我得到:

"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不会使用这些字符串进行搜索。有人知道我错过了什么吗?

提前多多感谢

0 个答案:

没有答案