【问题标题】:why does Solr not return any result on "suits" when there is a document that containing the word "Suits"为什么当有包含单词“Suits”的文档时,Solr 不返回任何关于“suits”的结果
【发布时间】:2011-10-08 03:44:57
【问题描述】:

我的 Solr 搜索引擎有点问题。当我搜索“西装”一词时,它不会返回任何结果。我 100% 确定它存在包含“Suits”一词的文档。但是,我可以搜索“suit”这个词,结果包含“suits”。

我的架构:

<schema name="hello" version="1.3">
    <types>
        <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
        <fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
            <analyzer type="index">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
                <filter class="solr.PorterStemFilterFactory"/>
            </analyzer>
            <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
                <filter class="solr.LowerCaseFilterFactory"/>
                <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
                <filter class="solr.PorterStemFilterFactory"/>
            </analyzer>
        </fieldType>
    </types>
    <fields>
        <field name="id" type="string" indexed="true" stored="true" required="true" />
        <field name="title" type="text" indexed="true" stored="true" required="true"/>
        <field name="description" type="text" indexed="true" stored="true" required="true"/>
        <field name="profileMiniature" type="string" stored="true" required="true"/>
    </fields>
    <uniqueKey>id</uniqueKey>
    <defaultSearchField>title</defaultSearchField>
</schema>

我的查询是"title:$q*^2 description:$q*"

【问题讨论】:

  • 我认为词干分析器会使这两个查询相同...尝试不使用通配符,也许?
  • 你的意思是*?已经尝试过了,它奏效了!但是如何在不使用 * 的情况下部分搜索单词?
  • 尝试使用分析页面了解其索引和搜索方式

标签: search solr full-text-search


【解决方案1】:

使用通配符进行搜索会禁用分析(如here 所述)。

要将suitsuits 匹配,您需要stemming 而不是通配符。如果您的数据有suit 并且查询是suits,则使用通配符无论如何都不起作用。

您能否提供更多信息 - 也许是一个解释您为什么需要通配符的用例?它将帮助我们为您的问题提出更好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    相关资源
    最近更新 更多