• solr总结 第六部分:solr查询语法


    1.基本查询语法

    • q:全文查询。schema.xml里面定义了如下两块。eg q=ibm即表示org_name或者org_weisite里面出现ibm的document都可以被匹配到。KeyWords查询就是这个参数。
      Java代码  收藏代码
      1. <!-- catchall field, containing all other searchable text fields (implemented  
      2.         via copyField further on in this schema  -->  
      3.    <field name="text" type="text" indexed="true" stored="false" multiValued="true"/>  
       
      Java代码  收藏代码
      1. <!-- copyField commands copy one field to another at the time a document  
      2.         is added to the index.  It's used either to index the same field differently,  
      3.         or to add multiple fields to the same field for easier/faster searching.  -->  
      4.   
      5.     <copyField source="org_name" dest="text" />  
      6.     <copyField source="org_website" dest="text" />  
       
    • fq:过滤查询参数。它和q一起使用。格式1:fq=field:X,eg q=ibm&fq=org_name:ibm,表示org_name或者org_website里面出现ibm并且org_name里面出现ibm的document。格式2:fq=field:[X TO X],区间查询,eg fq=org_id:[100 TO 200],表示org_id为100(包含)到200(包含)的所有document。给大家贴一段代码,你就知道什么类型的field才能进行区间查询。
      Java代码  收藏代码
      1. <!-- numeric field types that store and index the text  
      2.          value verbatim (and hence don't support range queries, since the  
      3.          lexicographic ordering isn't equal to the numeric ordering)  
      4. -->  
      5.     <fieldType name="integer" class="solr.IntField" omitNorms="true"/>  
      6.     <fieldType name="long" class="solr.LongField" omitNorms="true"/>  
      7.     <fieldType name="float" class="solr.FloatField" omitNorms="true"/>  
      8.     <fieldType name="double" class="solr.DoubleField" omitNorms="true"/>  
      9.   
      10.   
      11.     <!-- Numeric field types that manipulate the value into  
      12.          a string value that isn't human-readable in its internal form,  
      13.          but with a lexicographic ordering the same as the numeric ordering,  
      14.          so that range queries work correctly.  
      15. -->  
      16.     <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>  
      17.     <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>  
      18.     <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>  
      19.     <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>  
       
    • start:指定第一条记录在所有记录的位置。
    • rows:一次性取出多少条数据。start和rows一起使用用于分页。eg start=20&rows=10表示取20到30之间的数据,如果每页显示10条数据,那么这个结果就是第二页到第三页的数据了。
    • sort:用于排序。eg sort=org_name desc表示按org_name降序排序。注意,并不是所有的field都能排序的。如果schema.xml里面org_name被定义成text型,请问还能sort=org_name desc吗?不能,因为text类型定义的filter已经将org_name进行了切分,一个被切分后的field也就丧失了排序资格。
    • 其它的几种用的不多。就不说了。给出一个完整的url:http://localhost:8080/solr/core1/select?q=ibm&fq=org_name:ibm&fq=org_weisite:www.ibm.com&start=20&rows=30&sort=org_name desc。

    2.solr分布式

    • solr分布式可以分为两种:同一server不同索引库,不同server。在此,只讨论前一种。
    • http://localhost:8080/solr/core1/select?q=ibm&fq=org_name:ibm&fq=org_weisite:www.ibm.com&start=20&rows=30&sort=org_name desc。是查询core1索引库里面的数据,如果此时,有另外一索引库core2,其配置文件schema.xml与core1一样。通过http://localhost:8080/solr/core2/select?q=ibm&fq=org_name:ibm&fq=org_weisite:www.ibm.com&start=20&rows=30&sort=org_name desc可以查询到core2索引库的数据。
    • 如果要同时查询core1,core2,其语法是怎么样的呢?http://localhost:8080/solr/core1/select?q=ibm&fq=org_name:ibm&fq=org_weisite:www.ibm.com&start=20&rows=30&sort=org_name desc&shards=localhost:8080/solr/core1,localhost:8080/solr/core2。
    • 这个时候还是取10条数据。怎么取?实际上有四个步骤:1)从core1里面取匹配到的30条(rows)数据,已经排好序。2)从core2里面取匹配到的30条数据,已经排好序。3)合并这60条数据,重新排序。4)取20到30之间的10条。
    • 给出一个url以及后台信息,有兴趣的可以研究下。http://192.168.1.110:3033/solr/company_activity_log/select?q=ibm&sort=pal_date+desc&fq=(pal_type:[50+TO+60]+AND+allmemids:-1)+OR+pal_type:[1+TO+40]+OR+pal_type:[510+TO+699]+OR+pal_type:[2010+TO+2030]&start=20&rows=50&shards=192.168.1.110:3033/solr/company_activity_log,192.168.1.110:3033/solr/people_activity_log,192.168.1.110:3033/solr/buznews
      Java代码  收藏代码
      1. INFO: [people_activity_log] webapp=/solr path=/select params={fl=recordid&sort=pal_date+desc&start=0&q=ibm&isShard=true&wt=javabin&fq=(pal_type:[50+TO+60]+AND+allmemids:-1)+OR+pal_type:[1+TO+40]+OR+pal_type:[510+TO+699]+OR+pal_type:[2010+TO+2030]&fsv=true&rows=70&version=1} hits=4 status=0 QTime=1  
      2. Mar 242011 3:37:56 PM org.apache.solr.core.SolrCore execute  
      3. INFO: [buznews] webapp=/solr path=/select params={fl=recordid&sort=pal_date+desc&start=0&q=ibm&isShard=true&wt=javabin&fq=(pal_type:[50+TO+60]+AND+allmemids:-1)+OR+pal_type:[1+TO+40]+OR+pal_type:[510+TO+699]+OR+pal_type:[2010+TO+2030]&fsv=true&rows=70&version=1} hits=1955 status=0 QTime=2  
      4. Mar 242011 3:37:56 PM org.apache.solr.core.SolrCore execute  
      5. INFO: [company_activity_log] webapp=/solr path=/select params={fl=recordid&sort=pal_date+desc&start=0&q=ibm&isShard=true&wt=javabin&fq=(pal_type:[50+TO+60]+AND+allmemids:-1)+OR+pal_type:[1+TO+40]+OR+pal_type:[510+TO+699]+OR+pal_type:[2010+TO+2030]&fsv=true&rows=70&version=1} hits=1 status=0 QTime=0  
      6. Mar 242011 3:37:56 PM org.apache.solr.core.SolrCore execute  
      7. INFO: [buznews] webapp=/solr path=/select params={start=20&q=ibm&ids=news.1845018,news.1857975,news.1849705,news.1845017,news.1847219,news.1856408,news.1856584,news.1851627,news.1856105,news.1858456,news.1850005,news.1844890,news.1854864,news.1847360,news.1844998,news.1854711,news.1847708,news.1846403,news.1856387,news.1855993,news.1856216,news.1856595,news.1849931,news.1856117,news.1843249,news.1858277,news.1844969,news.1851645,news.1847030,news.1858666,news.1856324,news.1849897,news.1856170,news.1849323,news.1856563,news.1857434,news.1843233,news.1843235,news.1858766,news.1858015,news.1858014,news.1849353,news.1856365,news.1849354,news.1858016,news.1849629,news.1855972,news.1847282,news.1847346,news.1856573&isShard=true&wt=javabin&fq=(pal_type:[50+TO+60]+AND+allmemids:-1)+OR+pal_type:[1+TO+40]+OR+pal_type:[510+TO+699]+OR+pal_type:[2010+TO+2030]&rows=50&version=1} status=0 QTime=2  
      8. Mar 242011 3:37:56 PM org.apache.solr.core.SolrCore execute  
      9. INFO: [company_activity_log] webapp=/solr path=/select params={shards=192.168.1.110:3033/solr/company_activity_log,192.168.1.110:3033/solr/people_activity_log,192.168.1.110:3033/solr/buznews&sort=pal_date+desc&start=20&q=ibm&fq=(pal_type:[50+TO+60]+AND+allmemids:-1)+OR+pal_type:[1+TO+40]+OR+pal_type:[510+TO+699]+OR+pal_type:[2010+TO+2030]&rows=50} status=0 QTime=30  
       

    3.solr为我们提供了许多复杂的查询语法。更详细的资料,请参考solr wikihttp://wiki.apache.org/solr/FrontPage#solr_development 。

  • 相关阅读:
    C语言多文件参数传递
    第十章 C++11新特性
    第九章 STL标准库(二)
    第八章 标准模板库STL(一)
    第七章 2.泛型编程(模板)
    第七章 1.输入输出与模板
    第六章 多态
    第五章 继承与派生
    第四章 运算符重载
    第三章 类与对象进阶
  • 原文地址:https://www.cnblogs.com/duyinqiang/p/5696651.html
Copyright © 2020-2023  润新知