1.基本查询语法
- q:全文查询。schema.xml里面定义了如下两块。eg q=ibm即表示org_name或者org_weisite里面出现ibm的document都可以被匹配到。KeyWords查询就是这个参数。
- <!-- catchall field, containing all other searchable text fields (implemented
- via copyField further on in this schema -->
- <field name="text" type="text" indexed="true" stored="false" multiValued="true"/>
- <!-- copyField commands copy one field to another at the time a document
- is added to the index. It's used either to index the same field differently,
- or to add multiple fields to the same field for easier/faster searching. -->
- <copyField source="org_name" dest="text" />
- <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才能进行区间查询。
- <!-- numeric field types that store and index the text
- value verbatim (and hence don't support range queries, since the
- lexicographic ordering isn't equal to the numeric ordering)
- -->
- <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
- <fieldType name="long" class="solr.LongField" omitNorms="true"/>
- <fieldType name="float" class="solr.FloatField" omitNorms="true"/>
- <fieldType name="double" class="solr.DoubleField" omitNorms="true"/>
- <!-- Numeric field types that manipulate the value into
- a string value that isn't human-readable in its internal form,
- but with a lexicographic ordering the same as the numeric ordering,
- so that range queries work correctly.
- -->
- <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
- <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
- <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
- <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
- 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
- Mar 24, 2011 3:37:56 PM org.apache.solr.core.SolrCore execute
- 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
- Mar 24, 2011 3:37:56 PM org.apache.solr.core.SolrCore execute
- 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
- Mar 24, 2011 3:37:56 PM org.apache.solr.core.SolrCore execute
- 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
- Mar 24, 2011 3:37:56 PM org.apache.solr.core.SolrCore execute
- 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 。