use*_*872 5 elasticsearch spring-data spring-data-elasticsearch
我正在尝试使用弹性搜索进行全文搜索,使用Spring数据将弹性搜索与我的应用程序集成.
例如,
有6个字段需要编制索引.
1)firstName 2)lastName 3)标题4)位置5)行业6)电子邮件
HTTP://本地主机:9200 /测试/ _mapping /
我可以在映射中看到这些字段.
现在,我想通过搜索输入搜索这些字段.
例如,当我搜索"mike 123"时,它必须搜索所有这6个字段.
在Spring数据仓库中,
以下方法仅用于搜索firstName.
Collection<Object> findByFirstNameLike(String searchInput)
Run Code Online (Sandbox Code Playgroud)
但是,我想搜索所有领域.
我试过了,
Collection<Object> findByFirstNameLikeOrLastNameLikeOrTitleLikeOrLocationLikeOrIndustryLikeOrEmailLike(String searchInput,String searchInput1,String searchInput2,String searchInput3,)
Run Code Online (Sandbox Code Playgroud)
这里,即使输入字符串相同,我需要传递与6个参数相同的输入.此方法名称看起来更大,包含多个字段.
无论如何使用@Query或....
喜欢,
Collection<Object> findByInput(String inputString)
Run Code Online (Sandbox Code Playgroud)
此外,应该为其中一个领域提供加强.
例如,
当我搜索"mike mat"时,如果firstName中有任何匹配,那么即使在其他字段中存在完全匹配,该结果也应该是结果中的第一个匹配.
谢谢
让我们假设你的搜索词是变量query,你可以使用的方法search中ElasticsearchRepository.
repo.search(queryStringQuery(query))
使用queryStringQuery使用以下导入
import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery;
我找到了实现这一目标的方法并在此处发布。希望,这会有所帮助。
QueryBuilder queryBuilder = boolQuery().should(
queryString("Mike Mat").analyzeWildcard(true)
.field("firstName", 2.0f).field("lastName").field("title")
.field("location").field("industry").field("email"));
Run Code Online (Sandbox Code Playgroud)
谢谢
| 归档时间: |
|
| 查看次数: |
12476 次 |
| 最近记录: |