Printemps de données elastic search - Requête de recherche de texte Intégral
Je suis en train d'utiliser des élastiques de recherche de recherche plein texte et le Printemps de données pour l'intégration de l'élastique de recherche avec mon application.
Par exemple,
Il y a 6 champs à indexer.
1)prénom
2)nom
3)le titre
4)emplacement
5)l'industrie
6)e-mail
http://localhost:9200/test/_mapping/
Je peux voir ces champs dans la cartographie.
Maintenant, je voudrais faire une recherche par rapport à ces champs de saisie de recherche.
Par exemple, Quand je fais une recherche "mike 123", à cause de la recherche contre tous ces 6 champs.
Au Printemps référentiel de données,
La méthode ci-dessous fonctionne pour la recherche que dans le prénom.
Collection<Object> findByFirstNameLike(String searchInput)
Mais, je voudrais effectuer une recherche dans tous les domaines.
J'ai essayé,
Collection<Object> findByFirstNameLikeOrLastNameLikeOrTitleLikeOrLocationLikeOrIndustryLikeOrEmailLike(String searchInput,String searchInput1,String searchInput2,String searchInput3,)
Ici, même la chaîne d'entrée est le même, j'ai besoin de passer la même entrée que 6 params. Aussi le nom de la méthode a l'air plus gros avec plusieurs champs.
Est-il de toute façon à le rendre simple avec @Requête ou......
Comme,
Collection<Object> findByInput(String inputString)
Aussi, en stimulant doit être donnée pour un de la le domaine.
Par exemple,
Quand je fais une recherche pour "mike mat", si il n'y a aucune correspondance dans le prénom, qui devrait être le premier dans le résultat, même il y a correspondance exacte dans les autres champs.
Grâce
OriginalL'auteur user1578872 | 2015-04-05
Vous devez vous connecter pour publier un commentaire.
Permet supposons que votre terme de recherche est dans la variable
query
, vous pouvez utiliser la méthodesearch
dansElasticsearchRepository
.repo.search(queryStringQuery(query))
à utiliser queryStringQuery utilisation d'importation suivantes
import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery;
query
est un mot complet, ne fonctionne pas comme un contenant de requête.Merci @Roberto, vous économiser de mes lignes de code et beaucoup d'efforts.
OriginalL'auteur Roberto
J'ai trouvé le moyen d'y parvenir, et de poster ici. L'espoir, ce serait utile.
Grâce
J'ai trouvé queryStringQuery, de travail, de même que comme une chaîne de requête.
OriginalL'auteur user1578872
Pas une source de données elasticsearch expert. Mais je vois deux directions, vous pouvez aller. La première serait d'utiliser le @option de Requête. De cette façon, vous pouvez créer votre propre requête. La deuxième serait d'utiliser l'exemple dans le Filtre du générateur de l'article:
http://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.misc.filter
Dans elasticearch vous pouvez utiliser la multi_match requête:
http://www.elastic.co/guide/en/elasticsearch/reference/1.5/query-dsl-multi-match-query.html
En java une telle requête devrait ressembler à ceci:
Exemple venant de: http://www.elastic.co/guide/en/elasticsearch/client/java-api/current/query-dsl-queries.html#multimatch
OriginalL'auteur Jettro Coenradie
Nous pouvons écrire notre propre requête personnalisée comme ci-dessous.
nous pouvons index spécifique, le routage de la valeur (c'est le cas si l'alias est utilisé)
Sa bonne utilisation de votre propre queryBuilder helper qui peut séparer votre elasticSearchService de queryBuilder responsabilité.
Espère que cette aide
Grâce
OriginalL'auteur Ansar pasha
QueryBuilder classe est utile de requête à partir du printemps de Dao pour elastic search:
import org.elasticsearch.index.de la requête.QueryBuilders;
import org.elasticsearch.index.de la requête.QueryBuilder;
OriginalL'auteur alok