我正在尝试使用ElasticSearch进行全文搜索,并使用Spring Data 将ElasticSearch与我的应用程序集成。
例如,
有6个字段要编制索引。
1)名字2)姓氏3)职务4)位置5)行业6)电子邮件
http://localhost:9200/test/_mapping/
我可以在Map中看到这些字段。
现在,我想使用搜索输入对这些字段进行搜索。
例如,当我搜索“mike 123”时,它必须对所有这6个字段进行搜索。
在Spring Data 存储库中,
下面的方法只适用于在firstName中搜索。
Collection<Object> findByFirstNameLike(String searchInput)
但是,我想对所有字段进行搜索。
我试过了,
Collection<Object> findByFirstNameLikeOrLastNameLikeOrTitleLikeOrLocationLikeOrIndustryLikeOrEmailLike(String searchInput,String searchInput1,String searchInput2,String searchInput3,)
在这里,即使输入字符串是相同的,我需要传递相同的输入作为6个参数。而且方法名称看起来更大的多个字段。
有没有什么方法可以用@Query或......来简化它?
就像,
Collection<Object> findByInput(String inputString)
此外,应针对其中一个字段进行升压。
例如,
当我搜索“mike mat”时,如果firstName中有任何匹配,那么即使在其他字段中有完全匹配,也应该是结果中的第一个。
谢谢
7条答案
按热度按时间x4shl7ld1#
假设您的搜索词位于变量
query
中,您可以在ElasticsearchRepository
中使用方法search
。repo.search(queryStringQuery(query))
要使用queryStringQuery,请使用以下导入
import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery;
yhxst69z2#
我找到了实现这一点的方法,并张贴在这里。希望,这会有所帮助。
谢谢
lh80um4z3#
我不是spring-data elasticsearchMaven,但我认为有两个方向可以选择。第一个是使用@Query选项。这样你就可以创建自己的查询。第二个是使用Filter builder部分的示例:http://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.misc.filter
在elasticearch中,您可能需要使用multi_match查询:http://www.elastic.co/guide/en/elasticsearch/reference/1.5/query-dsl-multi-match-query.html
在java中,这样的查询看起来像这样:
示例来源:http://www.elastic.co/guide/en/elasticsearch/client/java-api/current/query-dsl-queries.html#multimatch
bn31dyow4#
我们可以写我们自己的自定义查询如下。我们可以特定的索引,路由值(如果使用别名,这是使用)
使用你自己的queryBuilder助手是很好的,它可以把你的elasticSearchService从queryBuilder的职责中分离出来。
希望这对你有帮助
谢谢
6fe3ivhb5#
QueryBuilder类有助于从Spring刀查询到ElasticSearch:
导入组织ElasticSearch索引查询;
导入组织ElasticSearch索引查询;
zzlelutf6#
尝试这样做,你甚至可以设置字段的重要性
xcitsw887#
另一种方法是使用查询字符串查询
这将搜索文档中指定索引的所有字段