<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>4.2 &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/4-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Thu, 12 Nov 2020 11:12:21 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 4.2: Schema API</title>
		<link>https://solr.pl/2013/05/20/solr-4-2-schema-api/</link>
					<comments>https://solr.pl/2013/05/20/solr-4-2-schema-api/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 20 May 2013 10:11:50 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[4.2]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[schema.xml]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=511</guid>

					<description><![CDATA[Wraz z premierą Solr 4.2 dostaliśmy możliwość wykorzystania protokołu HTTP do pobierania informacji o strukturze indeksu Solr. Oczywiście, jeżeli ktoś potrzebował takiej funkcjonalności przez Solr 4.2 mógł pobrać plik schema.xml za pomocą odpowiedniego zapytania, przetworzyć go i wydobyć szukane informacje.]]></description>
										<content:encoded><![CDATA[<p>Wraz z premierą Solr 4.2 dostaliśmy możliwość wykorzystania protokołu HTTP do pobierania informacji o strukturze indeksu Solr. Oczywiście, jeżeli ktoś potrzebował takiej funkcjonalności przez Solr 4.2 mógł pobrać plik <em>schema</em><em>.xml</em> za pomocą odpowiedniego zapytania, przetworzyć go i wydobyć szukane informacje. Wraz z premierą Solr 4.2 dostaliśmy jednak bardzo wygodne narzędzie za pomocą którego jesteśmy w stanie wydobyć interesujące nas informacje bez konieczności przetwarzania całego pliku <em>schema.xml</em>.</p>
<p><span id="more-511"></span></p>
<h3>Możliwości</h3>
<p>Przyjrzymy się zatem nowemu API.</p>
<h4>Zwracanie informacji w formacie XML</h4>
<p>Bardzo dużo użytkowników Solr przyzwyczajonych jest do tego, iż dane z Solr zwracane są domyślnie w formacie XML, co nie jest prawdą w przypadku opisywanego API, którego domyślny format zwracanych danych to JSON. Jeżeli chcemy, aby powyżej opisane informacje zwracane były w formacie XML należy do każdego z wymienionych zapytań dodać parametr <em>wt=xml</em>, na przykład:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/fieldtypes?wt=xml'</pre>
<h4>Pobieranie zdefiniowanych pól</h4>
<p>Zacznijmy od pobierania informacji na temat pól zdefiniowanych w indeksie. W tym celu udostępnione zostały dwie możliwości:</p>
<ol>
<li>Pobieranie informacji na temat wszystkich pól</li>
<li>Pobieranie informacji na temat konkretnego pola</li>
</ol>
<p>W pierwszym wypadku należy zadać następujące zapytanie:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/fields'</pre>
<p>W drugim przypadku wystarczy do powyższego zapytania dodać znak <em>/</em> oraz nazwę pola. Na przykład, aby pobrać dane na temat pola <em>author</em> należałoby wysłać następujące zapytanie:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/fields/author'</pre>
<p>Odpowiedź Solr na pierwsze zapytanie wygląda następująco:
</p>
<pre class="brush:plain">{
&nbsp; "responseHeader":{
&nbsp;&nbsp;&nbsp; "status":0,
&nbsp;&nbsp;&nbsp; "QTime":1},
&nbsp; "fields":[{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"_version_",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"long",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"author",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"text_general",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"cat",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"string",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "multiValued":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"category",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"text_general",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"id",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"string",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "multiValued":false,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "required":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "uniqueKey":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"url",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"text_general",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"weight",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"float",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true}]}</pre>
<p>Natomiast odpowiedź na zapytanie dotyczące pojedynczego pola wygląda następująco:
</p>
<pre class="brush:plain">{
  "responseHeader":{
    "status":0,
    "QTime":0},
  "field":{
    "name":"author",
    "type":"text_general",
    "indexed":true,
    "stored":true}}</pre>
<h4>Pobieranie zdefiniowanych pól dynamicznych</h4>
<p>Dokładnie tak samo, jak w powyższym przypadku wygląda sytuacja kiedy chcemy pobrać informacje na temat pól dynamicznych. Także i w tym przypadku mamy dwie możliwości:</p>
<ol>
<li>Pobranie informacji na temat wszystkich pól dynamicznych</li>
<li>Pobranie informacji na temat konkretnego wzorca pola dynamicznego</li>
</ol>
<p>W pierwszym wypadku należy zadać następujące zapytanie:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/dynamicfields'</pre>
<p>W drugim przypadku, podobnie jak wcześniej, dodajemy znak <em>/</em>, a następnie wzorzec:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/dynamicfields/random_*'</pre>
<p>Odpowiedź Solr na pierwsze zapytanie wygląda następująco:
</p>
<pre class="brush:plain">{
&nbsp; "responseHeader":{
&nbsp;&nbsp;&nbsp; "status":0,
&nbsp;&nbsp;&nbsp; "QTime":2},
&nbsp; "dynamicfields":[{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"*_coordinate",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"tdouble",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":false},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"ignored_*",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"ignored",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "multiValued":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"random_*",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"random"},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"*_p",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"location",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"*_c",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "type":"currency",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "indexed":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "stored":true}]}</pre>
<p>Natomiast odpowiedź na zapytanie dotyczące pojedynczego pola wygląda następująco:
</p>
<pre class="brush:plain">{
&nbsp; "responseHeader":{
&nbsp;&nbsp;&nbsp; "status":0,
&nbsp;&nbsp;&nbsp; "QTime":1},
&nbsp; "dynamicfield":{
&nbsp;&nbsp;&nbsp; "name":"random_*",
&nbsp;&nbsp;&nbsp; "type":"random"}}</pre>
<h4>Pobieranie typów pól</h4>
<p>Jak można się domyślać, podobnie jak w wyżej wymienionych przypadkach, tak samo w przypadku pobierania informacji na temat typów pól możemy dostać od Solr informacje na temat:</p>
<ol>
<li>Wszystkich typów pól zdefiniowanych w pliku <em>schema.xml</em></li>
<li>Pojedynczego zdefiniowanego typu</li>
</ol>
<p>W pierwszym wypadku należy zadać następujące zapytanie:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/fieldtypes'</pre>
<p>W drugim przypadku, na dokładnie takiej samej zasadzie dodajemy znak <em>/</em>, a następnie nazwę typu:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/fieldtypes/text_gl'</pre>
<p>Odpowiedź Solr na pierwsze zapytanie wygląda następująco:
</p>
<pre class="brush:plain">{
&nbsp; "responseHeader":{
&nbsp;&nbsp;&nbsp; "status":0,
&nbsp;&nbsp;&nbsp; "QTime":3},
&nbsp; "fieldTypes":[{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"alphaOnlySort",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TextField",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sortMissingLast":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "omitNorms":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "analyzer":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TokenizerChain",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "tokenizer":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.KeywordTokenizerFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "filters":[{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.LowerCaseFilterFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TrimFilterFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.PatternReplaceFilterFactory",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "replace":"all",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "replacement":"",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "pattern":"([^a-z])"}]},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fields":[],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dynamicFields":[]},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"boolean",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.BoolField",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sortMissingLast":true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fields":["inStock"],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dynamicFields":["*_bs",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "*_b"]},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"text_gl",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TextField",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "positionIncrementGap":"100",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "analyzer":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TokenizerChain",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "tokenizer":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.StandardTokenizerFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "filters":[{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.LowerCaseFilterFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.StopFilterFactory",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "words":"lang/stopwords_gl.txt",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ignoreCase":"true",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "enablePositionIncrements":"true"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.GalicianStemFilterFactory"}]},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fields":[],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dynamicFields":[]},
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "name":"tlong",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TrieLongField",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "precisionStep":"8",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "positionIncrementGap":"0",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fields":[],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "dynamicFields":["*_tl"]}]}</pre>
<p>Natomiast odpowiedź na zapytanie dotyczące pojedynczego pola wygląda następująco:
</p>
<pre class="brush:plain">{
&nbsp; "responseHeader":{
&nbsp;&nbsp;&nbsp; "status":0,
&nbsp;&nbsp;&nbsp; "QTime":2},
&nbsp; "fieldType":{
&nbsp;&nbsp;&nbsp; "name":"text_gl",
&nbsp;&nbsp;&nbsp; "class":"solr.TextField",
&nbsp;&nbsp;&nbsp; "positionIncrementGap":"100",
&nbsp;&nbsp;&nbsp; "analyzer":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.TokenizerChain",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "tokenizer":{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.StandardTokenizerFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "filters":[{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.LowerCaseFilterFactory"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.StopFilterFactory",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "words":"lang/stopwords_gl.txt",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ignoreCase":"true",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "enablePositionIncrements":"true"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "class":"solr.GalicianStemFilterFactory"}]},
&nbsp;&nbsp;&nbsp; "fields":[],
&nbsp;&nbsp;&nbsp; "dynamicFields":[]}}</pre>
<p>Jak widać ilość zwracanych informacji jest dość duża <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h4>Pobieranie informacji na temat sekcji copyField</h4>
<p>Dodatkowo za pomocą opisywanego API jesteśmy w stanie pobrać informacje na temat sekcji <em>copyField</em> poprzez wysłanie następującego zapytania:
</p>
<pre class="brush:bash">$curl 'http://localhost:8983/solr/collection1/schema/copyfields'</pre>
<p>Odpowiedź na powyższe zapytanie jest następująca:
</p>
<pre class="brush:plain">{
  "responseHeader":{
    "status":0,
    "QTime":1},
  "copyfields":[{
      "source":"author",
      "dest":"text"},
    {
      "source":"cat",
      "dest":"text"},
    {
      "source":"content",
      "dest":"text"},
    {
      "source":"content_type",
      "dest":"text"},
    {
      "source":"description",
      "dest":"text"},
    {
      "source":"features",
      "dest":"text"},
    {
      "source":"author",
      "dest":"author_s",
      "destDynamicBase":"*_s"}]}</pre>
<h3>Przyszłość</h3>
<p>W Solr 4.3 opisywane API zostało usprawnione oraz jest przygotowywane do umożliwienia zmian w strukturze indeksu za pomocą protokołu HTTP. Możemy zatem spodziewać się, iż w jednej z kolejnych wersji serwera wyszukiwania Solr otrzymamy możliwość łatwej zmiany struktury indeksu, przynajmniej takich, które nie będą powodować konfliktów z już zaindeksowanymi danymi.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2013/05/20/solr-4-2-schema-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
