diff --git a/src/main/config/openapi/openapi-user.yaml b/src/main/config/openapi/openapi-user.yaml
new file mode 100644
index 000000000..d92a5fd45
--- /dev/null
+++ b/src/main/config/openapi/openapi-user.yaml
@@ -0,0 +1,573 @@
+openapi: 3.0.3
+info:
+ title: Fess - OpenAPI 3.0
+ description: |-
+ This is a Fess Server based on the OpenAPI 3.0 specification.
+ license:
+ name: Apache 2.0
+ url: http://www.apache.org/licenses/LICENSE-2.0.html
+ version: 1.0.11
+externalDocs:
+ description: API Documentation for Fess
+ url: https://fess.codelibs.org/14.8/api/
+servers:
+ - url: http://localhost:8080
+tags:
+ - name: search
+ description: Search operations
+ - name: popularword
+ description: Popular word operations
+ - name: monitor
+ description: Monitoring operations
+ - name: suggest
+ description: Suggest operations
+paths:
+ /json/search:
+ get:
+ tags:
+ - search
+ summary: Finds documents by query
+ description: Finds documents by search conditions
+ operationId: searchDocuments
+ parameters:
+ - name: q
+ in: query
+ description: Search words
+ required: false
+ schema:
+ type: string
+ example: Fess
+ - name: start
+ in: query
+ description: Start position
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ exclusiveMinimum: false
+ default: 0
+ example: 0
+ - name: num
+ in: query
+ description: The number of returned documents as a search result
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ exclusiveMinimum: false
+ maximum: 100
+ exclusiveMaximum: false
+ default: 20
+ example: 20
+ - name: sort
+ in: query
+ description: Sorted field name
+ required: false
+ schema:
+ type: string
+ example: score
+ - name: fields.label
+ in: query
+ description: Filtered label name
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: array
+ items:
+ type: string
+ example: [name]
+ - name: callback
+ in: query
+ description: Callback name for using JSONP
+ required: false
+ schema:
+ type: string
+ - name: facet.field
+ in: query
+ description: Facet field name
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: array
+ items:
+ type: string
+ example: [label]
+ - name: facet.query
+ in: query
+ description: Facet query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: array
+ items:
+ type: string
+ example: ["timestamp:[now/d-1d TO *]"]
+ - name: facet.size
+ in: query
+ description: Item size in facets returned by facet.field
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ exclusiveMinimum: false
+ default: 10
+ example: 10
+ - name: facet.minDocCount
+ in: query
+ description: Minumum document size in facets
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ exclusiveMinimum: false
+ default: 0
+ example: 0
+ - name: geo.location.point
+ in: query
+ description: Latitude and Longitude for Geo search
+ required: false
+ schema:
+ type: string
+ example: 35.0,139.0
+ - name: geo.location.distance
+ in: query
+ description: Distance for Geo search
+ required: false
+ schema:
+ type: string
+ example: 10km
+ - name: lang
+ in: query
+ description: Language
+ required: false
+ schema:
+ type: string
+ example: en
+ - name: preference
+ in: query
+ description: String to specify a shard for searching
+ required: false
+ schema:
+ type: string
+ example: abc
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ response:
+ type: object
+ properties:
+ version:
+ type: string
+ example: "14.8"
+ status:
+ type: integer
+ example: 0
+ q:
+ type: string
+ example: Fess
+ query_id:
+ type: string
+ example: bd60f9579a494dfd8c03db7c8aa905b0
+ exec_time:
+ type: number
+ example: 0.21
+ query_time:
+ type: integer
+ format: int64
+ example: 0
+ page_size:
+ type: integer
+ example: 20
+ page_number:
+ type: integer
+ example: 1
+ record_count:
+ type: integer
+ format: int64
+ example: 31625
+ page_count:
+ type: integer
+ example: 1
+ highlight_params:
+ type: string
+ example: "&hq=n2sm&hq=Fess"
+ next_page:
+ type: boolean
+ example: true
+ prev_page:
+ type: boolean
+ example: false
+ start_record_number:
+ type: integer
+ example: 1
+ end_record_number:
+ type: integer
+ example: 20
+ page_numbers:
+ type: array
+ items:
+ type: string
+ example: ["1", "2", "3", "4", "5"]
+ partial:
+ type: boolean
+ example: false
+ search_query:
+ type: string
+ example: "(Fess OR n2sm)"
+ requested_time:
+ type: integer
+ format: int64
+ example: 1507822131845
+ related_query:
+ type: array
+ items:
+ type: string
+ example: ["aaa"]
+ related_contents:
+ type: array
+ items:
+ type: string
+ example: []
+ result:
+ type: array
+ items:
+ type: object
+ properties:
+ filetype:
+ type: string
+ example: html
+ title:
+ type: string
+ example: "Open Source Enterprise Search Server: Fess — Fess 11.0 documentation"
+ content_title:
+ type: string
+ example: "Open Source Enterprise Search Server: Fess — Fe..."
+ digest:
+ type: string
+ example: "Docs » Open Source Enterprise Search Server: Fess Commercial Support Open Source Enterprise Search Server: Fess What is Fess ? Fess is very powerful and easily deployable Enterprise Search Server. ..."
+ host:
+ type: string
+ format: hostname
+ example: "fess.codelibs.org"
+ last_modified:
+ type: string
+ format: date-time
+ example: "2017-10-09T22:28:56.000Z"
+ content_length:
+ type: string
+ example: "29624"
+ timestamp:
+ type: string
+ format: date-time
+ example: "2017-10-09T22:28:56.000Z"
+ url_link:
+ type: string
+ example: "https://fess.codelibs.org/"
+ created:
+ type: string
+ format: date-time
+ example: "2017-10-10T15:00:48.609Z"
+ site_path:
+ type: string
+ example: "fess.codelibs.org/"
+ doc_id:
+ type: string
+ example: "e79fbfdfb09d4bffb58ec230c68f6f7e"
+ url:
+ type: string
+ format: uri
+ example: "https://fess.codelibs.org/"
+ content_description:
+ type: string
+ example: "Enterprise Search Server: Fess Commercial Support Open...Search Server: Fess What is Fess ? Fess is very powerful...You can install and run Fess quickly on any platforms...Java runtime environment. Fess is provided under Apache...Apache license. Demo Fess is Elasticsearch-based search"
+ site:
+ type: string
+ example: "fess.codelibs.org/"
+ boost:
+ type: string
+ example: "10.0"
+ mimetype:
+ type: string
+ example: "text/html"
+ '400':
+ $ref: '#/components/responses/BadRequest'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+
+ /json/label:
+ get:
+ tags:
+ - search
+ summary: List labels
+ description: Returns available labels
+ operationId: listLabels
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ response:
+ type: object
+ properties:
+ version:
+ type: string
+ example: "14.8"
+ status:
+ type: integer
+ example: 0
+ record_count:
+ type: integer
+ example: 9
+ result:
+ type: array
+ items:
+ type: object
+ properties:
+ label:
+ type: string
+ example: AWS
+ value:
+ type: string
+ example: aws
+ '400':
+ $ref: '#/components/responses/BadRequest'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+
+ /json/popularword:
+ get:
+ tags:
+ - popularword
+ summary: List popular words
+ description: Returns available labels
+ operationId: listLPopularWords
+ parameters:
+ - name: seed
+ in: query
+ description: Random seed to return popular words
+ required: false
+ schema:
+ type: string
+ example: 123
+ - name: labels
+ in: query
+ description: Labels to fileter results
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: array
+ items:
+ type: string
+ example: [label]
+ - name: fields
+ in: query
+ description: Fields to find results
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: array
+ items:
+ type: string
+ example: [field]
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ response:
+ type: object
+ properties:
+ version:
+ type: string
+ example: "14.8"
+ status:
+ type: integer
+ example: 0
+ record_count:
+ type: integer
+ example: 9
+ result:
+ type: array
+ items:
+ type: string
+ example: ["test"]
+ '400':
+ $ref: '#/components/responses/BadRequest'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+
+ /json/ping:
+ get:
+ tags:
+ - monitor
+ summary: Check a server status
+ description: Returns status
+ operationId: ping
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ response:
+ type: object
+ properties:
+ version:
+ type: string
+ example: "14.8"
+ status:
+ type: integer
+ example: 0
+ message:
+ type: object
+ properties:
+ status:
+ type: string
+ example: green
+ timed_out:
+ type: boolean
+ example: false
+ '400':
+ $ref: '#/components/responses/BadRequest'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+
+ /suggest:
+ get:
+ tags:
+ - suggest
+ summary: Finds suggest words
+ description: Returns words for suggest
+ operationId: findSuggestWords
+ parameters:
+ - name: query
+ in: query
+ description: Inputting characters for search
+ required: true
+ schema:
+ type: string
+ example: fe
+ - name: num
+ in: query
+ description: The number of suggest words
+ required: false
+ schema:
+ type: integer
+ minimum: 0
+ exclusiveMinimum: false
+ example: 10
+ default: 10
+ - name: tags
+ in: query
+ description: Tags to filter results
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: string
+ example: "tag1,tag2"
+ - name: fields
+ in: query
+ description: Fields to find results
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: string
+ example: "field1,field2"
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ response:
+ type: object
+ properties:
+ version:
+ type: string
+ example: "14.8"
+ status:
+ type: integer
+ example: 0
+ result:
+ type: object
+ properties:
+ took:
+ type: string
+ example: 18
+ total:
+ type: string
+ example: 355
+ num:
+ type: string
+ example: 10
+ hits:
+ type: array
+ items:
+ type: object
+ properties:
+ text:
+ type: string
+ example: fess
+ tags:
+ type: array
+ items:
+ type: string
+ example: [java, python]
+ '400':
+ $ref: '#/components/responses/BadRequest'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+
+components:
+ responses:
+ BadRequest:
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Error'
+ Unauthorized:
+ description: Unauthorized request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Error'
+ schemas:
+ Error:
+ type: object
+ properties:
+ response:
+ type: object
+ properties:
+ version:
+ type: string
+ example: "14.8"
+ status:
+ type: integer
+ example: 1
+ message:
+ type: string
+ example: "error_code:bd6b0bd6-0144-40bc-9567-c5751dd8eecb"
+