我想用 javascript 进行高级搜索。如何?

193*_*286 2 javascript search

我使用下面的代码进行基本的、区分大小写的、特定于术语的搜索。它现在可以工作,但我想要一些东西(按重要性顺序):

1:忽略大小写(即“hi”和“Hi”都是相同的。toLowerCase不是一个选项,也不是同一件事)

2:例如,如果搜索查询是“Search Term”且搜索字符串是“searching terms”,则会产生命中。

3:即使在找到命中后仍搜索整个字符串以获取更多命中。

目的是搜索<p>具有特定id术语的标签。如果有则显示它。最终,我将在循环中使用它,搜索许多<p>标签并显示命中的标签并隐藏未命中的标签。

代码:

<!DOCTYPE html>
<html>
    <body>
        <p id="demo">Click the button to locate where in the string a specifed value occurs.</p>
        <p id="demo1" style="display:none;">Hello world, welcome to the universe.</p>
        <button onclick="myFunction()">Try it</button>

        <script>
            function myFunction() {
                var x = document.getElementById("demo1")
                var str = x.innerHTML.toString();
                var n = str.indexOf("welcome");
                if (n != -1) {
                    x.style.display = 'inline';
                } else {
                    x.innerHTML = 'Negative';
                    x.style.display = 'inline';
                }
            }
        </script>

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 6

我首先对您的输入字符串进行标记:

function tokenize(input) {
    return input.toLowerCase().replace(/[^a-z0-9_\s]/g, '').split(/\s+/g)
}
Run Code Online (Sandbox Code Playgroud)

这对您的搜索词有何影响:

> tokenize("I'm your search string.")
["im", "your", "search", "string"]
Run Code Online (Sandbox Code Playgroud)

接下来,去掉后缀(我什至不会尝试处理这不起作用的情况。这就是 NLP 的用途):

function remove_suffix(token) {
    return token.replace(/(ing|s)$/, '');
}
Run Code Online (Sandbox Code Playgroud)

它会对每个令牌执行以下操作:

> remove_suffix('searching')
"search"
> remove_suffix('terms')
"term"
Run Code Online (Sandbox Code Playgroud)

因此,对于每个查询字符串,您可以构建一个关键字列表:

function get_keywords(query) {
    var tokens = tokenize(query);
    var keywords = tokens.map(remove_suffix);
    keywords.sort();

    return keywords;
}
Run Code Online (Sandbox Code Playgroud)

它会将您的查询转换为关键字:

> get_keywords('searching terms')
["search", "term"]
> get_keywords('term search')
["search", "term"]
Run Code Online (Sandbox Code Playgroud)

现在,您只需检查查询字符串的关键字是否包含在搜索字符串的关键字中。

这是一个非常简单的示例,不会处理大量的极端情况,但至少您在某种程度上了解了如何使用关键字进行搜索。