Donc, ReactiveSearch fonctionne bien, mais j'ai remarqué que lors du chargement initial, il exécute une requête pour récupérer des éléments - étant donné que mon index contiendra peut-être un million d'éléments, je voudrais idéalement désactiver cette option et uniquement renvoyer les résultats de l'autosuggest?
defaultQuery={() => { query: { match_none: {} } } }
MODIFIER J'ai également essayé d'ajouter la valeur par défaut afin d'essayer d'arrêter la requête initiale renvoyant des données. Mais cela ne semble pas fonctionner comme prévu.
defaultValue="3245423 kjhkjhkj 2kj34h12jkh 213k4jh12"
EDIT 2:
J'ai également essayé defaultQuery dans le format suivant et l'ai ajouté à les composants reactiveList et dataSearch cela me donne une erreur qui n'est pas définie n'est pas un objet 'this.defaultQuery.sort' - si j'ajoute un tri aux deux requêtes, cela ne fait aucune différence:
<ReactiveBase app="tths-shop-items" url="my-es-cluster" credentials="user:password" > <ScrollView> <View style={styles2.container}> <DataSearch componentId="searchbox" dataField={[ 'name' ]} placeholder="Search" /> <ReactiveList componentId="results" dataField="name" size={7} showResultStats={true} pagination={true} react={{ and: "searchbox" }} onData={(res) => { return ( <View style={styles2.result}> <Image source={{ uri: res.image.replace('http', 'https') }} style={styles2.image} /> <View style={styles2.item}> <Text style={styles2.title}>{res.name}</Text> </View> </View> )} } /> </View> </ScrollView> </ReactiveBase>
3 Réponses :
Voici donc une réponse, vous stockez la valeur sur laquelle vous cliquez via la boîte de recherche dans l'état, puis vous tripotez la requête par défaut à partir de là. Notez que la requête par défaut ne match_none: {} s'il n'y a pas de texte de recherche.
C'est un peu inefficace car vous faites toujours une requête qui ne renvoie rien, mais cela fonctionne - je vais laisser cette question ouverte pour donner de meilleures réponses le temps de venir vers le haut.
<ScrollView> <View style={styles.mainContainer}> <DataSearch componentId="searchbox" dataField={[ 'name' ]} placeholder="Search" queryFormat="and" noInitialQuery={true} onValueChange={(value) => { if(value === ''){ this.setState({searchText: null}) } }} onValueSelected={(value, cause, source) => { this.setState({searchText: value.value}) } } /> <ReactiveList componentId="results" dataField="name" size={7} showResultStats={true} pagination={true} react={{ and: "searchbox" }} defaultQuery={()=> { if(this.state.searchText !== null){ return { query: { match: { name: this.state.searchText } } } } else { return { query: { match_none: {} } } } }} onData={(res) => { return ( <View style={styles2.result}> <Image source={{ uri: res.image.replace('http', 'https') }} style={styles2.image} /> <View style={styles2.item}> <Text style={styles2.title}>{res.name}</Text> </View> </View> )} } /> </View> </ScrollView>
Je sais que c'est une vieille question, mais je suis tombé sur le même problème.
Ma solution semble un peu différente - avec la prop onQueryChange.
onQueryChange={ function(prevQuery, nextQuery) { if ('match_all' in nextQuery['query']) { nextQuery['query'] = { match_none: {} } } } }
Ceci désactivera la liste de résultats avec tous les résultats affichés et n'affichera les résultats qu'après avoir sélectionné un filtre ou entré un terme de recherche.
Ooo gentil, je vais essayer! Bienvenue dans StackOverflow - si cela fonctionne, je marquerai ceci comme la bonne réponse car c'est une meilleure solution
Merci :) Avez-vous essayé?
La réponse sélectionnée était très utile mais j'ai changé la defaultQuery pour utiliser la requête d'origine dans le cas où un terme de recherche serait présent:
defaultQuery={()=> { if(this.state.searchText !== null){ return { } } else { return { query: { match_none: {} } } } }}