Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想用javascript进行高级搜索。怎么用?_Javascript_Search - Fatal编程技术网

我想用javascript进行高级搜索。怎么用?

我想用javascript进行高级搜索。怎么用?,javascript,search,Javascript,Search,我有一个基本的、区分大小写的、特定于术语的搜索,代码如下。这将暂时奏效,但我希望(按重要性顺序)能做到: 1:忽略大小写(即“hi”和“hi”都是相同的。toLowerCase不是选项,也不是相同的东西) 2:例如,如果搜索查询为“搜索词”,搜索字符串为“搜索词”,则将产生命中率 3:搜索整个字符串,即使在找到更多的命中之后也是如此 其目的是在带有特定id的标签中搜索术语。如果有,则显示它。最后,我将在一个循环中使用它,搜索许多标记,并显示有点击的标记,而隐藏没有点击的标记 代码: 单击按钮以

我有一个基本的、区分大小写的、特定于术语的搜索,代码如下。这将暂时奏效,但我希望(按重要性顺序)能做到:

1:忽略大小写(即“hi”和“hi”都是相同的。
toLowerCase
不是选项,也不是相同的东西)

2:例如,如果搜索查询为“搜索词”,搜索字符串为“搜索词”,则将产生命中率

3:搜索整个字符串,即使在找到更多的命中之后也是如此

其目的是在带有特定id的标签中搜索术语。如果有,则显示它。最后,我将在一个循环中使用它,搜索许多
标记,并显示有点击的标记,而隐藏没有点击的标记

代码:


单击按钮以查找字符串中指定值出现的位置

你好,世界,欢迎来到宇宙

试试看 函数myFunction(){ var x=document.getElementById(“demo1”) var str=x.innerHTML.toString(); var n=str.indexOf(“欢迎”); 如果(n!=-1){ x、 style.display='inline'; }否则{ x、 innerHTML='负'; x、 style.display='inline'; } }
看看正则表达式引擎。这需要一些时间来学习,但一旦你知道了,你可能会在这里实现你的目标

以下是一份:


希望这有助于

我相信,经过一些调整,这应该能满足您的要求。 不过,最好在后端执行此操作=)

//返回在str中找到的searchStr的索引,如果需要,区分大小写
函数getIndicatesof(searchStr、str、区分大小写){
var startIndex=0,searchStrLen=searchStr.length;
var指数,指数=[];
如果(!区分大小写){
str=str.toLowerCase();
searchStr=searchStr.toLowerCase();
}
而((index=str.indexOf(searchStr,startIndex))>-1){
指数。推送(指数);
startIndex=索引+搜索列表;
}
回报指数;
}
//这将在搜索字符串数组中拆分搜索字符串
var myStringArray=mySearchString.split(\\s+);
var结果=真;
//循环所有分割的搜索字符串,并分别搜索每个字符串
对于(变量i=0;i0){
//对找到的字符串的索引执行一些操作
}否则{
结果=假;
}
}
//如果未找到其中一个搜索词,则此处的结果将为false。

借用自

我将首先标记输入字符串:

function tokenize(input) {
    return input.toLowerCase().replace(/[^a-z0-9_\s]/g, '').split(/\s+/g)
}
这会对您的搜索词产生影响:

> tokenize("I'm your search string.")
["im", "your", "search", "string"]
接下来,去掉后缀(我甚至不打算尝试处理这种方法不起作用的情况。这就是NLP的用途):

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

> remove_suffix('searching')
"search"
> remove_suffix('terms')
"term"
因此,对于每个查询字符串,您可以构造一个关键字列表:

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

    return keywords;
}
> get_keywords('searching terms')
["search", "term"]
> get_keywords('term search')
["search", "term"]
它会将您的查询转换为关键字:

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

    return keywords;
}
> get_keywords('searching terms')
["search", "term"]
> get_keywords('term search')
["search", "term"]
现在,您只需检查查询字符串的关键字是否包含在搜索字符串的关键字中


这是一个非常简单的示例,不会处理大量的死角情况,但至少您看到了如何使用关键字进行搜索。

这不是JavaScript的任务。要想做你想做的事情,你需要使用自然语言处理。我将首先标记输入字符串并删除后缀。从那里,你可以尝试搜索你的数据库。我懂一些java。小程序能处理这个问题吗?这类事情通常不是客户端完成的。Java有很多很好的自然语言处理库,你可以使用,但是它们有一个陡峭的学习曲线。“toLowerCase不是一个选项,也不是同一件事”为什么不呢?toLowerCase改变了searh术语,这是没有帮助的,因为搜索字符串的大小写是未知的。toLowerCase是规范化文本。到目前为止,我可以看到如何获得大小写不敏感。我一定会用这个。看看我如何解决原始帖子中的第2项。不太了解如何解决原始帖子中的第3项。简言之,您可以使用组和全局搜索(tag/g)。要了解更多答案,您可以阅读以下内容:我不仅需要这台服务器,而且还需要磁盘。我会仔细看看这个。感谢您给出一个可能出错的示例:
删除后缀('string')
-->
“str”
。尽管如此,+1,因为它对其余部分是一个很好的答案。@Cerbrus:And
'running'->'runn'
。例外情况的清单就这样不断地出现。
> get_keywords('searching terms')
["search", "term"]
> get_keywords('term search')
["search", "term"]