0

Apologies if I am posting a duplicated question, if so please point me to original question.

I am a solr novice and trying to achieve ordered word name search using solr.I am expecting following response from 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

I am generating queries using MethodName using spring data solr. Please help me how I should form my schema to index this data and what filters I should use ?

Also guide me how to form the queries using methodName using spring data solr from appropriate result.

4

2 回答 2

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

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

于 2015-09-16T20:31:53.653 回答
0

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

您可以尝试的是SurroundQueryParser(我自己没有尝试过)

如果这对你不起作用,那么悲伤,如果我在你身边,我会考虑某种定制:

  • Solr 过滤器插件,将产生所需的令牌(类似于 Shingle 过滤器)
  • 在文档上创建仅包含允许匹配项的文件,并使用关键字标记器之类的东西来强制执行顺序
于 2015-09-17T21:02:49.523 回答