【问题标题】:Solr search exact word not including phrasesSolr 搜索不包括短语的确切单词
【发布时间】:2015-08-04 03:36:03
【问题描述】:

我想知道 solr 配置中是否有一种方法可以完全匹配丢弃短语中的那些。

示例:
搜索字符串:“你好”
结果应该是:“你好”
并且不应包含:“Hello world”、“Hi, Hello”

它应该搜索与该单词完全匹配但在短语中忽略它。

谢谢。

【问题讨论】:

    标签: c# solr full-text-search config


    【解决方案1】:

    将字段类型更改为字符串。

    确保您有以下条目

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    

    StrField 类型不被分析,而是被索引/存储。

    然后更改字段键的字段类型。

    <field name="fieldName" type="string" indexed="true" stored="true"/>
    

    这样就可以进行精确搜索,因为不会有任何标记。

    或者选项可以使用下面的字段类型

    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
          <tokenizer class="solr.KeywordTokenizerFactory"/> 
          <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
    </fieldType>
    

    这里的 KeywordTokenizer 没有实际的分词,所以整个输入字符串被保存为一个单独的词。

    LowerCase TokenFilter 符合您的预期,这可能是您希望排序/搜索不区分大小写时

    【讨论】:

    • 你能分享一下schema.xml吗...?您是否重新索引了相同的内容?
    • 。我只是将类型“文本”更改为“字符串”然后停止/启动 tomcat 服务
    • 但是您需要重新索引数据,或者您可以在 solr Web 界面中进行分析...
    • 是的,这就够了……做了同样的事情后,你还是达不到?
    • 在这种情况下,您使用 fieldType
    【解决方案2】:

    我最初考虑的是邻近性,但您的情况不需要这样做。

    定义一个字符串类型的字段,比如 amn_name_ss -- 这是一个存储的字符串

    使用 "" 搜索时,字符串会寻找精确搜索

    例如:amn_name_ss:"Hello" 将只返回具有 Hello 值的文档

    创建文档为 {"id":"amn1","amn_name_ss":"Hello","type":"AMN"} {"id":"amn2","amn_name_ss":"Hello World","type":"AMN"}

    查询: http://hostname:8080/solr/collection1/select?q=%3A&fq=type%3AAMN&wt=json&indent=true

    将给出如下结果

    查询: http://hostname:8080/solr/collection1/select?q=amn_name_ss%3A%22Hello%22&fq=type%3AAMN&wt=json&indent=true

    会给出如下结果

    【讨论】:

    • 对不起,我对 solr 不太熟悉。你能解释一下如何进行邻近设置吗?
    • 那么将搜索字段设置为字符串类型可以解决这个问题吗?不需要标记器/分析器/过滤器更改?
    • 是的,将字段类型设置为字符串将解决精确比较问题。我们使用带有文本字段的 Tokenizer,假设您要存储“Google 和 Samsung”,并且在搜索 Samsung 和 Google 时应该检索结果。当您不需要使用“and”解码搜索时,您将添加停用词过滤器
    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多