为什么 Solr 不返回“suits”的任何结果当存在包含单词“Suits”的文档时

发布于 2024-11-24 10:20:53 字数 2344 浏览 6 评论 0原文

我的 Solr 搜索引擎有一点问题。当我搜索“suits”一词时,它不会返回任何结果。我 100% 确信存在包含单词“Suits”的文档。然而,我可以搜索单词“suits”,结果包含“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*"

I have a little problem with my Solr search engine. It does not return any result when I search on the word "suits". I'm 100% sure that it exists a document that are containing the word "Suits". I can however search for the word "suit" and the result containing "suits" ends up.

My schema:

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

my query is "title:$q*^2 description:$q*".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2024-12-01 10:20:54

使用通配符的搜索会禁用分析(如此处所述)。

要将 suitsuits 匹配,您需要词干提取 而不是通配符。如果您的数据有 suits 并且查询是 suits,那么使用通配符无论如何都不起作用。

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

A search with wildcards disables the analysis (as described here).

To match suit with suits, you need stemming and not wildcards. Using wildcards will anyway not work if your data has suit and the query is suits.

Could you provide some more information - maybe a use-case which explains why you need wildcards? It will help us come up with a better solution to your problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文