React-native 中的全文搜索
Full Text Search in React-native
React native noob here ,
我想知道是否可以在 React 中使用 sqlite 的 FullTextSearch 功能,如果可以,请告诉我在哪里可以了解更多信息。
谢谢!
为 React Native 使用 Realm 数据库,
Realm 是一个 object-oriented 数据库。 OO 模型使它比 SQLite 快 10 倍,并使您免于 运行 吨查询,这对于典型的 SQL 数据库来说很常见
fuse.js 可以帮助您搜索文本。
realm = new Realm({
schema: [StudentScheme]
})
const mydata = realm.objects('Product_Info');
let filteredData = [];
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] [=10=] OR prodDesc LIKE[c] [=10=]", "*" + obj + "*")
Object.keys(databaseSearchResult).map(key => {
filteredData.push(databaseSearchResult[key])
})
});
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
value={this.state.search}
/>
<FlatList
data={this.state.filteredData}
renderItem={this.rowRenderer}
keyExtractor={(item, key) => key}
/>
=========================================== ========================
updateSearch = search => {
this.setState({search: search}, () => this.searchText(search.trim()));
};
searchText = (search) => {
console.log(" Detail Activity ------------- search -->" + search);
realm = new Realm({
schema: [StudentScheme]
})
const mydata = realm.objects('Product_Info');
let filteredData = {};
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] [=11=] OR
prodDesc LIKE[c] [=11=]", "*" + obj + "*")
Object.keys(databaseSearchResult).map(key => {
filteredData[`${Object.keys(filteredData).length}`] =
databaseSearchResult[key]
})
});
this.setState({
filteredData
}, () => {
console.log('Search-------------------------------FILTER DATA', this.state.filteredData)
let dataProvider = new DataProvider((r1, r2) => r1 !== r2)
let updatedDataProvider=dataProvider.cloneWithRows(filteredData)
this.setState({dataProvider: updatedDataProvider},()=>{
console.log("CALLBACKK ", this.state.dataProvider)
})
})
}
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
value={this.state.search}
/>
{
Object.keys(this.state.filteredData).map((key)=>(
this.rowRenderer(null, this.state.filteredData[key])
))
}
var Realm = require('realm');
let realm;
let dataProvider = new DataProvider((r1, r2) => r1 !== r2)
realm = new Realm({
schema: [StudentScheme]
})
state = {
search: '',
dataProvider: new DataProvider((r1, r2) => r1 !== r2).cloneWithRows({}),
filteredData: {}
};
updateSearch = search => {
this.setState({search: search}, () => this.searchText(search.trim()));
};
searchText = (search) => {
console.log(" Detail Activity ------------- search -->" + search);
const mydata = realm.objects('Product_Info');
let filteredData = [];
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] [=10=] OR prodDesc LIKE[c] [=10=] OR prodPrice LIKE[c] [=10=] ", "*" + obj + "*" )
Object.keys(databaseSearchResult).map(key => {
filteredData.push(databaseSearchResult[key])
})
});
this.setState({
filteredData
}, () => {
console.log('Search-------------------------------FILTER DATA \n', this.state.filteredData)
console.log('Search-------------------------------FILTER DATA--------------- \n');
})
}
fetchDB = () => {
var mydata = realm.objects('Product_Info');
this.setState({dataProvider: dataProvider.cloneWithRows(mydata), filteredData: mydata}) //TODO ...
}
<FlatList
data={this.state.filteredData}
renderItem={this.rowRenderer}
keyExtractor={(item, key) => key}
/>
React native noob here , 我想知道是否可以在 React 中使用 sqlite 的 FullTextSearch 功能,如果可以,请告诉我在哪里可以了解更多信息。 谢谢!
为 React Native 使用 Realm 数据库, Realm 是一个 object-oriented 数据库。 OO 模型使它比 SQLite 快 10 倍,并使您免于 运行 吨查询,这对于典型的 SQL 数据库来说很常见 fuse.js 可以帮助您搜索文本。
realm = new Realm({
schema: [StudentScheme]
})
const mydata = realm.objects('Product_Info');
let filteredData = [];
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] [=10=] OR prodDesc LIKE[c] [=10=]", "*" + obj + "*")
Object.keys(databaseSearchResult).map(key => {
filteredData.push(databaseSearchResult[key])
})
});
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
value={this.state.search}
/>
<FlatList
data={this.state.filteredData}
renderItem={this.rowRenderer}
keyExtractor={(item, key) => key}
/>
=========================================== ========================
updateSearch = search => {
this.setState({search: search}, () => this.searchText(search.trim()));
};
searchText = (search) => {
console.log(" Detail Activity ------------- search -->" + search);
realm = new Realm({
schema: [StudentScheme]
})
const mydata = realm.objects('Product_Info');
let filteredData = {};
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] [=11=] OR
prodDesc LIKE[c] [=11=]", "*" + obj + "*")
Object.keys(databaseSearchResult).map(key => {
filteredData[`${Object.keys(filteredData).length}`] =
databaseSearchResult[key]
})
});
this.setState({
filteredData
}, () => {
console.log('Search-------------------------------FILTER DATA', this.state.filteredData)
let dataProvider = new DataProvider((r1, r2) => r1 !== r2)
let updatedDataProvider=dataProvider.cloneWithRows(filteredData)
this.setState({dataProvider: updatedDataProvider},()=>{
console.log("CALLBACKK ", this.state.dataProvider)
})
})
}
<SearchBar
placeholder="Type Here..."
onChangeText={this.updateSearch}
value={this.state.search}
/>
{
Object.keys(this.state.filteredData).map((key)=>(
this.rowRenderer(null, this.state.filteredData[key])
))
}
var Realm = require('realm');
let realm;
let dataProvider = new DataProvider((r1, r2) => r1 !== r2)
realm = new Realm({
schema: [StudentScheme]
})
state = {
search: '',
dataProvider: new DataProvider((r1, r2) => r1 !== r2).cloneWithRows({}),
filteredData: {}
};
updateSearch = search => {
this.setState({search: search}, () => this.searchText(search.trim()));
};
searchText = (search) => {
console.log(" Detail Activity ------------- search -->" + search);
const mydata = realm.objects('Product_Info');
let filteredData = [];
let keywords = search.split(" ");
keywords.forEach((obj, index) => {
let databaseSearchResult = mydata.filtered("prodName LIKE[c] [=10=] OR prodDesc LIKE[c] [=10=] OR prodPrice LIKE[c] [=10=] ", "*" + obj + "*" )
Object.keys(databaseSearchResult).map(key => {
filteredData.push(databaseSearchResult[key])
})
});
this.setState({
filteredData
}, () => {
console.log('Search-------------------------------FILTER DATA \n', this.state.filteredData)
console.log('Search-------------------------------FILTER DATA--------------- \n');
})
}
fetchDB = () => {
var mydata = realm.objects('Product_Info');
this.setState({dataProvider: dataProvider.cloneWithRows(mydata), filteredData: mydata}) //TODO ...
}
<FlatList
data={this.state.filteredData}
renderItem={this.rowRenderer}
keyExtractor={(item, key) => key}
/>