【问题标题】:Name Search on SolrSolr 上的名称搜索
【发布时间】:2015-09-16 18:08:11
【问题描述】:

如果我发布重复的问题,请道歉,如果是,请指出原始问题。

我是 solr 新手,正在尝试使用 solr 实现有序词名称搜索。我期待 solr 的以下响应

Name                Search Term         Result
Thomas Alva Edison  Thomas              Match
Thomas Alva Edison  Alva                Match
Thomas Alva Edison  Edison              Match
Thomas Alva Edison  Thomas Edison       Match
Thomas Alva Edison  Thomas Alva         Match
Thomas Alva Edison  Alva Edison         Match
Thomas Alva Edison  Thomas Alva Edison  Match
Thomas Alva Edison  homas               No Match
Thomas Alva Edison  Edison Thomas       No Match
Thomas Alva Edison  homas edison        No Match
Thomas Alva Edison  homas dison         No Match

我正在使用 Spring Data solr 使用 MethodName 生成查询。 请帮助我应该如何形成我的架构来索引这些数据以及我应该使用哪些过滤器?

还指导我如何使用来自适当结果的 spring data solr 使用 methodName 形成查询。

【问题讨论】:

    标签: spring solr spring-data-solr riak-search yokozuna


    【解决方案1】:

    您的schema.xml 可能是与solr 一起提供的那个,因为其中已经有一个名为name(标记化和索引)的字段,如下所示:

    <field name="name" type="text_general" indexed="true" stored="true"/>
    

    所以您需要做的就是在该索引上创建一个文档:

    curl localhost:8983/solr/collection1/update/json?commit=true -H 'Content-type:application/json' -d '
    [
      {
        "id" : "1",
        "name" : "Thomas Edison"
      }
    ]'
    

    您可能有一个 java 类或多或少地表示您的文档结构,如下所示:

    @SolrDocument(solrCoreName = "collection1")
    public class Person {
    
        @Id
        private Long id;
        @Indexed
        private String name;
    
        // setters and getters
    
    }
    

    以及如下的存储库:

    public interface PersonDao extends SolrCrudRepository<Person, Long> {
    
        // derivable method names here
    
    }
    

    为了根据名称进行搜索,您可以声明以下方法:

    List<Person> findByName(String name);
    

    当字段被标记化时,它将在该字段的标记内搜索提供的参数。这将导致您期望的结果。

    【讨论】:

    • 感谢您的帮助。您的建议大部分都有效,除了一种情况是:Thomas Alva Edison Thomas Edison Match It doesn't match。我在 text_general 字段 StandardTokenizerFactory LowerCaseFilterFactory 下有以下过滤器和标记器,它们都应用于索引和查询部分。请告诉我我需要做什么才能通过上述案例?再次感谢您的帮助
    【解决方案2】:

    对于这个相当具体的需求,我没有想到任何过滤器/标记器。

    你可以试试SurroundQueryParser(我自己没试过)

    如果这对你来说不是那么难过,如果我在你身边,我会考虑进行某种定制:

    • Solr 过滤器插件,可生成所需的令牌(类似于 Shingle 过滤器)
    • 在文档上创建仅包含允许匹配项并使用关键字标记器之类的东西来强制执行顺序的文件

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2017-09-09
      • 1970-01-01
      • 2020-05-05
      • 2014-05-13
      相关资源
      最近更新 更多