搜索还是用lucene吧。研究一下,很快就可以上手。实在不成你用whoosh,可以实现多个字段,复杂逻辑的搜索。
contains我没有用过,不过既然它支持一个字段的索引,按道理就可以支持多个字段。 原理上,它应该是自己对MYSQL的某个字段做了一个分词与索引。
另外有些数据库本身也支持一些简单的搜索,只是数据量大会效率低。
取包含 '卷期号' 三个字的节点 //ul[@id='side-menu']/li/a[contains(text(),"卷期号")]
取其内容 //ul[@id='side-menu']/li/a[contains(text(), '卷期号')]/text()
>
在查询xml的时候,常常要知道某个元素的值或其属性值是否包含了某一值。如果采用把xml转换成字符串的做法势必造成系统性能的下降。
jdom:提供了解释xml的途径;
xpath:提供了查询xml的一种途径。大家或许对数据库的sql查询语句非常熟悉,xpath就有点类似于sql查询语句,只不过它是xml的查询语言。
contains:此函数在某种程度上有点类似sql的like关键字。
如,xml的结构如下:
<xml version="10"
encoding="UTF-8">
<root>
<element name="第一层第一个元素"
type="ele" order="第一个">
<sub name="第二层第一个子元素" type="sub"
order="第一个">
第一层第一个元素下面的第二层第一个子元素
</sub>
<sub name="第二层第二个子元素" type="sub" order="第二个">
第一层第一个元素下面的第二层第二个子元素
</sub>
<sub name="第二层第三个子元素" type="sub" order="第三个">
第一层第一个元素下面的第二层第三个子元素
</sub>
</element>
<element name="第一层第二个元素" type="ele"
order="第二个">
<sub name="第二层第一个子元素" type="sub" order="第一个">
第一层第二个元素下面的第二层第一个子元素
</sub>
<sub name="第二层第二个子元素" type="sub" order="第二个">
第一层第二个元素下面的第二层第二个子元素
</sub>
<sub name="第二层第三个子元素"
type="sub" order="第三个">
第一层第二个元素下面的第二层第三个子元素
</sub>
<sub name="第二层第十二个子元素" type="sub"
order="第十二个">
第一层第二个元素下面的第二层第十二个子元素
</sub>
</element>
</root>
(1)如要查询子元素中顺序含有“二” 的子元素,即查询顺序中带“二”的元素;包括:
<sub name="第二层第二个子元素"
type="sub" order="第二个">
第一层第一个元素下面的第二层第二个子元素
</sub>
<sub name="第二层第二个子元素" type="sub"
order="第二个">
第一层第二个元素下面的第二层第二个子元素
</sub>
<sub
name="第二层第十二个子元素" type="sub" order="第十二个">
第一层第二个元素下面的第二层第十二个子元素
</sub>
则xpath的写法为:xPath="/root/element/sub[contains(@order,'二')]";
(2)如要查询子元素值中含有“第一层第二个”,即查询sub中值包含“第一层第二个”;包括:
<sub name="第二层第一个子元素"
type="sub" order="第一个">
第一层第二个元素下面的第二层第一个子元素
</sub>
<sub name="第二层第二个子元素" type="sub"
order="第二个">
第一层第二个元素下面的第二层第二个子元素
</sub>
<sub
name="第二层第三个子元素" type="sub" order="第三个">
第一层第二个元素下面的第二层第三个子元素
</sub>
<sub name="第二层第十二个子元素"
type="sub" order="第十二个">
第一层第二个元素下面的第二层第十二个子元素
</sub>
则xpath的写法为:xPath="/root/element/sub[contains(contains,'第一层第二个')]";
下面是源代码:
import orgjdom;
import javautil;
import
orgjdomxpathXPath;
public void findNodes(Document xmlDoc){
Element
ele=xmlDocgetRootElement();
try{
String
xPath1="/root/element/sub[contains(@order,'二')]";
List
list1=XPathselectNodes(ele,xPath1);
}catch(Exception
e){
eprintStackTrace();
}
try{
String
xPath2="/root/element/sub[contains(contains,'第一层第二个')]";
List
list2=XPathselectNodes(ele,xPath2);
}catch(Exception
e){
eprintStackTrace();
}
用PYTHON ,DJANGO 做站,在通常的情况下,需要用到 orM 的查询方法,比如objectfilter(tag__contains='keywords')
在这种情况下,如果你跟踪 sql 语句,你会发现,SQL 语句会生成 select like bianry '%keywords%', 如果是这样的语句,在某些情况是下是会出问题的,也就是说查询出来的数据可能会比你预计的少。
如果你用 raw sql 查总数 select count() from table where like '%keywords%' 得到数量可能比你用ORM 采用上面的方式得到的数据多,问题就在于生成的条件问题。
后来查询了 django 说明,如果把ORM 语句变成:objectfilter(tag__icontains='keywords') 就好了。
注意contains ,icontains 的区别 后来从django官网查到了说明:
select from member where user_name like '%李%',这样就查找所有“李”字的字段。select from member where user_name ='李',这样就查找是“李”字的字段
以上就是关于django问题:搜索功能,contains的用法全部的内容,包括:django问题:搜索功能,contains的用法、XPath匹配含有指定文本的标签---contains的用法、xpath contains函数中能用参数吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)