React-native中的全文搜索

时间:2018-03-18 13:49:21

标签: react-native sqlite react-native-android react-native-ios

在这里反应原生菜鸟, 我想知道是否可以使用sqlite的FullTextSearch功能做出反应,如果有的话,请告诉我在哪里可以了解更多信息。 谢谢!

3 个答案:

答案 0 :(得分:1)

使用 Realm数据库实现React Native , Realm是一个面向对象的数据库。 OO模型使其比SQLite快10倍,并使您免于运行大量查询,这对于典型的SQL数据库来说是常见的事情 和 fuse.js 可以帮助您搜索文本。

答案 1 :(得分:0)

    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] $0 OR prodDesc LIKE[c] $0", "*" + 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] $0 OR 
                                 prodDesc LIKE[c] $0", "*" + 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])
                ))
            }

答案 2 :(得分:0)

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] $0 OR prodDesc LIKE[c] $0 OR prodPrice LIKE[c]  $0 ", "*" + 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}
            />